函式過載(overload),函式覆蓋,函式隱藏
阿新 • • 發佈:2019-02-05
一:函式過載(overload):
1.發生條件:同一個類中的成員函式之間;任意兩個函式之間;
2.形式:函式名稱相同,但引數型別不同,或引數的個數不同;
3.備註:以下兩種情形不構成函式過載:
A.int fun1(int a,...);
void fun2(int a,...); //函式名稱相同,引數型別相同,引數個數相同,只有函式返回值型別不同
B.int fun1(int a);
int fun2(int a,int b=0); //函式的引數列表中,引數存在預設值
4.特殊地:在類定義中,成員函式型別是否為const,也構成函式的過載,如:
int fun1(int a);
int fun2(int a) const;
此時,類的const物件,只調用const成員函式;而非const物件,在此時函式過載的情形下,會呼叫非const成員函式;
二:函式覆蓋:
1.發生條件:發生於子類與父類之間,且函式為虛擬函式(virtual);
2.形式:函式的返回值,函式名稱,函式的形參列表完成相同;(即:函式宣告完全相同);
3.作用:與實現OOP的多型(Polymorphism)有關;
三:函式隱藏:
1.發生條件:發生於子類與父類之間,且函式不是虛擬函式;
2.形式:只要函式名稱相同,而不論函式的形參個數是否相同,函式形參的型別是否相同,函式的返回值是否相同;
3.備註:子類的函式,要呼叫父類被隱藏的函式時,可以在子類函式的初始化區域進行,如:
void child::fun1(int a) : fun1() //fun1()為父類中的函式
{...}