過載 重寫和隱藏三者的區別

2021-08-19 14:02:56 字數 865 閱讀 4660

c++知識總結目錄索引

過載:同一作用域內被宣告的幾個具有不同引數列表(引數的型別,個數,順序不同)的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。

class a

;

重寫(覆蓋):是指派生類中存在重新定義的函式。其函式名,引數列表,都必須同基類中被重寫的函式一致,返回值型別除了協變情況下也必須和基類中被重寫的函式一致,只有函式體不同(花括號內)。派生類物件呼叫時會呼叫派生類的重寫函式,不會呼叫被重寫函式。基類中被重寫的函式必須有virtual修飾。

// 3重寫了1

// 4重寫了2(協變情況)

class a

;class b : public a

;

隱藏(重定義):是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式並且基類函式沒有virtual修飾,不管引數列表是否相同,基類函式都會被隱藏。

//派生類中3隱藏了1

//派生類中4隱藏了2

class a

;class b : public a

;

類別

作用域函式名

引數列表

返回值型別

是否有virtual修飾

過載同一作用域

相同不同

無要求無要求

重寫(覆蓋)

不同作用域(父類和子類)

相同相同

相同(協變除外)

父類函式必須有

隱藏(重定義)

不同作用域(父類和子類)

相同無要求

無要求父類函式不能有

重寫 過載 重定義三者的概念

1 重寫 override 重寫也可以看做覆蓋,子類重新定義父類中具有相同名稱和引數的虛函式,函式特徵相同,但函式的具體實現不同,它主要在繼承關係中出現。被重寫的函式不能是static的,但必須是virtual的。2 過載 overload 過載是函式名相同,引數列表不同,過載只是在類的內部存在,但...

C 學習記錄 重寫 過載 重構三者區別

重構是對程式內部的架構的調整。重構強調的是在不改變 軟體外部可觀察的行為 前提下,對內部結構進行調整,使得從程式的外部功能上看,沒有任何變化。如下例子 重構前 如下 include class child void func intmain int argc,char const ar 程式執行後,...

過載 重寫和隱藏

過載 a 相同的範圍 在同乙個類中 b 函式名字相同 c 引數不同 返回型別不足以區分過載函式 d virtual關鍵字可有可無 重寫 實際上就是虛函式動態繫結 a 不同的範圍,分別位於基類和派生類中 b 函式的名字相同 c 引數相同 e 一般情況下返回型別相同 除非返回型別分別為基類指標和派生類指...