函式過載和函式的預設引數

2021-09-24 16:13:10 字數 2403 閱讀 7132

函式過載:如果同乙個作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。

main函式不能過載。返回值不能用來判斷函式是否過載。

引數列表不同:引數的個數不同;引數的型別不同;引數的順序不同;

void print(int a);

void print(double b);

int print(int a,int b);

過載和const形參:

頂層const不影響傳入函式的物件。乙個擁有頂層const的形參無法和乙個沒有頂層const的形參區分開來。

頂層const:表示指標本身是常量;

底層const:表示指標所指向的物件是常量;

void func(int a);

void func(const int a); //重定義了func,const在引用或指標變數中會有影響,但在普通型別中沒有影響。

void func(int *const a); //重定義了func,a是乙個頂層const。

void func(int const *a); //過載func。

另一方面,如果形參是某種型別的指標或引用,則通過區分其指向的是常量物件

還是非常量物件可以實現函式過載,此時的const是底層的。

void func(int &a);       //形參a能接受非常量的實參,而不能接受常量實參  

void func(const int &a); //構成過載,傳遞給a的實參能接受常量和非常量的實參

void func(int *a);

void func(const int *a); //a是乙個底層const,可以構成過載

過載對作用域的一般性質並沒有什麼改變:如果我們在內層作用域中宣告名字,

它將隱藏外層作用域中宣告的同名實體。在不同作用域中無法過載函式名:

string read();             //在全域性作用域中宣告乙個名為read的函式

void print(const string &);

void print(double);

void func(int val)

void print(const string &);

void print(double);

void print(int);

void func(int val)

預設實參:在函式的很多次呼叫中他們都被賦予乙個相同的值,這個反覆出現的值,稱為函式的預設實參。

使用預設實參呼叫函式:

int func(int a=10,char b='b',double c=4.1);

在函式呼叫時,函式實參是按其位置解析的,預設實參負責填充函式呼叫缺少的尾部引數。

int tmp;

tmp = func(66); //等價於func(66,'b',4.1);

tmp = func(66,'a'); //等價於func(66,'a',4.1);

tmp = func(66,'a',3.14); //等價於func(66,'a',3.14);

tmp = func(,,3.14); //錯誤的,只能省略尾部的實參

預設實參宣告:

函式的宣告一般在標頭檔案中,並且乙個函式一般只宣告一次,但多次宣告也是可以的。

不過,在給定的作用域中乙個實參只能被賦予一次預設實參。函式的後續宣告只能只能為之前

那些沒有預設值的形參新增預設實參,而且該形參右側的所有形參必須都有預設值。

int func(a, b, c=3.14);

int func(a, b, c=1.33); //錯誤的,已被賦值過的預設實參,不能再次賦值

int func(a=10, b, c=3.14); //錯誤的,形參右側的所有形參必須都有預設值

int func(a=10, b='v', c=3.14); //對的

預設實參初始值:

區域性變數不能作為預設實參,除此之外,只要表示式的型別能轉換成形參所需的型別,

該表示式就能作為預設實參。

int a = 10;

double b = 3.14;

char c = 'c';

int func(int x=a,double y=b,char z=c){} //全域性變數初始化形參

void f()

預設引數和函式過載

一 預設引數 1.概念 預設引數是宣告或定義函式時為函式的引數指定乙個預設值 在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。2.分類 1 全預設引數 void funtest int a 1,int b 2,int c 3 2 半預設引數 void funtest int a,...

預設引數 函式過載

預設引數 帶有初始值的引數 注 1.非全預設引數,引數的預設值賦值要從最後邊從右向左依次進行 eg int sum int a,int b 1,int c 2 2.實參的匹配是從左向右進行的 eg int sum int a,int b 1,int c 2 sum 10,20 10對應a,20對應b...

c 函式過載和預設引數

函式過載 是c 語言物件導向的特點 多型的一種表現形式 又稱為靜多型 過載的規則 1 函式名相同。2 引數個數不同,引數型別不同,引數順序不同,均可構成過載。3 僅返回值型別不同則不可以構成過載。void func int a ok void func char a ok void func int...