1. 程式人生 > >函式過載(overload),函式覆蓋,函式隱藏

函式過載(overload),函式覆蓋,函式隱藏

一:函式過載(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()為父類中的函式

{...}