哈囉大家好,這裡是筆記了一堆用不到程式的小編過路君子
怕哪天自己要用找不到,特此記錄下來,一些比較稀奇的用法
上一篇的筆記在這裡!基本上跟這一篇一樣!
大標題、完整程式碼、如果有輸出會附上輸出,基本上等於0的講解!
希望能在這些非常雜亂的文章裡面找到你所需要的小功能,就算不會用看過至少也有個C++能這樣寫的概念吧~
以指標的形式呼叫函數
#include<iostream> using namespace std; void out(int); void add(int, int, void (*op)(int)); //一定要先宣告 int main() { int a = 9, b = 6; add(a, b, out); return 0; } void add(int ui, int ux, void (*op)(int br)) { ui += ux; (*op)(ui); } void out(int xc) { cout << xc; }
輸出
15
呼叫被區域變數遮蔽的全域變數
#include<iostream> #include<string> using namespace std; string apple("yummy!\n"); int main() { string apple("yuck!\n"); cout << "Apple is so " << apple; cout << "Umm...no, is so " << ::apple; return 0; }
輸出
Apple is so yuck!
Umm...no, is so yummy!
Umm...no, is so yummy!
建立區域靜態變數
~再次呼叫副程式時不會被初始化
#include<iostream> using namespace std; void call(void); int main() { for(int ui=0;4>ui;ui++) call(); return 0; } void call(void) { static int a = 0; cout << "Now number is " << a << '\n'; a += 2; }
輸出
Now number is 0
Now number is 2
Now number is 4
Now number is 6
Now number is 2
Now number is 4
Now number is 6
函數重載和呼叫、初始化隱藏於class內成員
#include<iostream> #include<string> using namespace std; class vov { private: string ui; int ux; public: vov(string); void out(void); void out(int); }; int main() { vov Alice("Yale"); //函數初始化 Alice.out(); Alice.out(9); //函數重載 return 0; } vov::vov(string init) { this->ui = init; this->ux = 6491; } void vov::out(void) { cout << this->ui << ' ' << this->ux << '\n'; } void vov::out(int add) { this->ux += add; cout << this->ui << ' ' << this->ux << '\n'; }
輸出
Yale 6491
Yale 6500
Yale 6500
使所有的class共用某項變數
#include<iostream> using namespace std; class test { public: static int ux; }; int test::ux; //一定要宣告!!! int main() { test op; op.ux = 777; test some; //宣告新的test物件 cout << some.ux << '\n'; //宣告於class內的static (type)可以想像是存在於這個class內的全域變數 return 0; }
輸出
777
class物件之間的轉換
#include<iostream> #include<string> using namespace std; class reset { private: string game; int number; public: reset(string); void SetNumber(int); operator int() const; operator string() const; }; int main() { reset kill("prayer"); kill.SetNumber(777); int a = 23; a += kill; cout << a << '\n'; string b = kill; cout << b << '\n'; return 0; } reset::reset(string gameName) { this->game = gameName; this->number = 0; } void reset::SetNumber(int num) { this->number = num; } reset::operator int() const { return this->number; } reset::operator string() const { string information = "\'s game"; return this->game + information; }
輸出
800
prayer's game
prayer's game
建構複製運算子
#include<iostream> using namespace std; class reset { private: int *number; public: reset(int *); reset(const reset *); //複製建構子 void out(void); }; int main() { int *x = new int[5]; for(int a=0, b=2;5>a;a++,b+=9) x[a] = b; reset *kill = new reset(x); delete [] x; reset pray(kill); delete kill; //證明pray的number不是指向kill的number pray.out(); return 0; } reset::reset(int *nums) { this->number = new int[5]; for(int a=0;5>a;a++) this->number[a] = nums[a]; } reset::reset(const reset *oldReset) { this->number = new int[5]; for(int a=0;5>a;a++) this->number[a] = oldReset->number[a]; } void reset::out(void) { for(int a=0;5>a;a++) cout << this->number[a] << ' '; }
輸出
2 11 20 29 38