哈囉大家好,這裡是筆記了一堆用不到程式的小編過路君子
怕哪天自己要用找不到,特此記錄下來,一些比較稀奇的用法
上一篇的筆記在這裡!基本上跟這一篇一樣!
大標題、完整程式碼、如果有輸出會附上輸出,基本上等於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