足跡C primer 14 函式匹配 函式指標

2021-06-22 06:03:11 字數 1849 閱讀 9507

1.精確匹配

2.通過const轉換實現的匹配

3.通過型別提公升實現的匹配

4.通過算術型別轉換或者指標轉換

5.通過類型別轉換實現的匹配

如果過載函式的區別在於它們的引用型別的形參是否引用了const,或者指標型別的形參是否指向const,則當呼叫發生時編譯器通過實參是否是常量來決定選擇哪個型別。

當我們吧函式名作為乙個值來使用時,該函式自動轉換為指標。

這裡有三個等價的呼叫

bool (*pf)(const string &, const string &);

bool b1=pf("hello", "goodbye");

bool b2=(*pf)("hello", "goodbye");

bool b3=lengthcompare("hello", "goodbye");

void ff(int *);

void ff(unsigned int);

//使用型別別名

using f=int(int*, int); //f是函式型別,不是指標

using pf=int(*)(int*, int); //pf是指標型別

pf f1(int); //正確:pf是指向函式的指標,f1返回指向函式的指標

f f1(int); //錯誤:f是函式型別,f1不能返回乙個函式

f *f1(int); //正確:顯示地制定返回型別是指向函式的指標

牢記當我們將decltype作用於某個函式的時候,它返回的不是指標型別,因此我們有必要在函式前面顯示地加上*

decltype(sumlength) *getfcn(const string &);

/** 功能:編寫函式宣告,接受兩個int形參並且返回型別也是int,宣告乙個vector物件,令其元素師指向該函式的

* 指標。編寫4個函式,分別對兩個int值執行加減乘除運算,在vector中儲存指向這些函式的指標。

* 呼叫上述vector物件中的每個元素並輸出其結果

*/#include #include using namespace std;

//練習6.54

typedef int fun(int, int);

//vectorv1;

//練習6.55

int sum(int a, int b)

int reduce(int a, int b)

int ride(int a, int b)

int divide(int a, int b)

int main()

{ int a=10,b=5;

vectorv1;

v1.push_back(&sum);

v1.push_back(&reduce);

v1.push_back(&ride);

v1.push_back(÷);

vector::iterator it=v1.begin(); //用迭代器來準確定位vector的尾置

for(;it != v1.end(); ++it)

{cout<<((*it)(a,b))<

ps:好樣的,乙個程式解決了三個題,這次有點小心得,那就是我到現在認為iterator迭代器是和vector容器一起使用的。

足跡C primer 10 函式基礎

c 語言中,名字有作用域,物件有生命週期。名字的作用域是程式文字的一部分,名字在其中可見。物件生命週期是程式執行過程中該物件存在的一段時間。size t count calls int main return 0 和其他名字一樣,函式的名字也必須在使用之前宣告。類似於變數,函式只能定義一次,但可以宣...

足跡C primer 12 函式過載

main函式不能過載 record lookup const account account是乙個型別 record lookup const phone record lookup const name account acct phone phone record r1 lookup acct ...

足跡C primer 19 建構函式再探

sales data sales data const string s,unsigned cnt,double price 這個建構函式和這個效果是一樣的 sales data const std string s,unsigned n,double p bookno s units sold n...