C 函式預設引數, 函式過載, 函式模板

2021-07-24 10:24:51 字數 2285 閱讀 8000

一:c++函式預設引數

注意一下幾點就可以

1:預設引數的指定在函式的宣告,並不是在定義

2:必須從右到左新增預設引數,即要為某個引數設定預設值,則必須為它

右邊的所有引數提供預設值

**:

/*預設函式引數*/

#includeusing std::cin;

using std::cout;

using std::endl;

int max(int a, int b = 0); //函式宣告的時候指定預設值

/*假設這個函式有三個引數, max(int a, int b = 0, int c);

這樣的宣告肯定是不行的,沒有遵守第二點

*/ int main()

int max(int a, int b)

二:函式過載,乙個多型的概念

過載也應注意幾點

1:函式過載的關鍵是函式的引數列表,也稱為函式特徵標

2:返回值不同並不構成過載

3:編譯器在檢查函式特徵標時,把型別引用和型別本身視為同一特徵標

4:在進行對有函式過載的時候,注意二義性的發生,後面的**會有說明

**:

/*函式過載*/ 

#includeusing std::cin;

using std::cout;

using std::endl;

/*int max(int a, int b);

double max(int a, int b);

如果這樣定義這兩個函式,並不會構成過載, 程式會報重複定義的錯誤

*//*

int max(char bits);

int max(char &bits);

並不構成過載

*//*

print(long a, int b);

print(double a, int b);

如果你在主函式想下面這樣呼叫 ,就會報二義性錯誤

int year; print(year, 6) ;

編譯器分不出該呼叫哪個函式

*/ int max(int a, int b);

double max(double a, double b);

int main()

int max(int a, int b)

double max(double a, double b)

三:函式模板

函式的模板提高了**的可重用性,這個特性很好,也挺複雜的

**:乙個簡單的例子

#includeusing std::cin;

using std::cout;

using std::endl;

templateint swap(t &a, t &b);

int main()

templateint swap(t &a, t & b)

函式模板還有乙個特性,可以顯式具體化,在某種場合可以使用

**:

/*

模板還有乙個特性就是可以顯式具體化

對於乙個結構體,我們可以為它寫個交換的模板,但是我們只是想

交換結構體中某些成員的值時,顯式具體化就體現出其好處

具體的可以看**

*/#include#include#includeusing std::cin;

using std::cout;

using std::endl;

struct people

; template int swap(t &a, t &b); //fuction prototype

template<>int swap(people &p1, people &p2);

//顯式具體化對於同乙個型別, 優先性高於普通函式的模板

//程式的結果也證明了這一點

void show(people a)

int main()

; people a2 = ;

swap(a1, a2);

show(a1); show(a2);

return 0;

}templateint swap(t &a, t &b)

template<> int swap(people &p1, people &p2)

模板函式還有乙個特性:顯式例項化,有興趣的同學可以研究一下

感覺用的不多

過載引用引數 函式模板

void sink double r1 matches modifiable lvalue void sank const double r2 matches modifiable or const lvalue,rvalue void sunk double r3 matches rvalue 左...

C 筆記函式過載函式模板

include using namespace std class student void display 定義公用函式display 在函式的後面加上不加 結果都是一樣的一句話的結束符號 不影響函式的執行在c 中也允許函式的過載,即函式的一物多。include include using nam...

C 函式過載和函式模板

過載 不同的東西在不同場合有不同的含義,一物多用 例如 和 可以是移位運算子,在c 也是輸入輸出運算子 cout 和cin 函式過載 同名函式實現不同功能。函式過載實現方式 引數型別和引數個數至少乙個不同即可。優點 函式過載將相同或類似功能的函式用乙個函式名,但仍然要定義每個函式,於是函式模板派上用...