c++中過載、覆蓋和多型是三個有些相似的概念,以下以**的方式展示三者的不同。
1)過載:同名函式不同引數(型別、個數),編譯時編譯器確定使用哪個函式,屬於編譯時「多型」,不是真正的多型;
2)覆蓋:子類覆蓋父類的虛函式,函式名、引數必須相同。覆蓋需要滿足兩個條件,繼承父類的虛函式和使用父類的指標(或引用)繫結子類例項。由覆蓋產生的多型是執行時多型,編譯時無法確定具體呼叫那個函式,是真正的多型;
3)隱藏:父類與子類中同名函式的一種處理機制,同乙個子類的函式可以同時覆蓋父類的函式並且隱藏父類的某些函式。
/**這個工程主要研究c++中的過載、覆蓋和隱藏三個相似的概念*/
#include #include using namespace std;
void fun(int i)
//int fun(int i) //錯誤,不能根據返回值來對函式進行過載!
//void fun(float i)
void fun(int *p)
void fun(const int *p) //正確,low level的const可以作為過載的依據!
//void fun(int* const p) //錯誤,top level的const不能作為過載依據!
//class base
void fun1(float i) //與上乙個fun1構成過載關係
void fun2(int i, int j)
};class derived : public base
void fun1(string str) //隱藏了父類的fun1,並且與子類的fun1形成過載
void fun2(float i) //隱藏了父類的fun2
};int main()
c 多型 重寫 覆蓋 隱藏 過載
多型 重寫 覆蓋 c 中多型是指同乙個操作作用於不同的物件可以有不同的解釋,產生不同的執行結果,多型是通過虛函式實現的,在派生類中重寫基類的虛函式。呼叫方法 宣告基類的指標,利用該指標指向派生類物件,就可以用該指標呼叫派生類中重寫後的虛函式。這樣就可以根據指向的派生類不同,而實現不同的方法。多型的特...
C 中覆蓋,過載和隱藏
include using namespace std struct foo void func int x 那麼,如果不用 using 宣告,拆分後 中的函式 func 不是過載應該是什麼呢?是隱藏 hide 下面是關於過載 覆蓋和隱藏的區別 這幾個概念都有乙個共同點 函式名稱相同,所以不免讓人混...
C 過載 覆蓋 和隱藏
這幾個概念都有乙個共同點 函式名稱相同,所以不免讓人混淆,大致的區別如下 過載 overload 必須在乙個域中,函式名稱相同但是函式引數不同,過載的作用就是同乙個函式有不同的行為,因此不是在乙個域中的函式是無法構成過載的,這個是過載的重要特徵 覆蓋 override 覆蓋指的是派生類的虛函式覆蓋了...