c++的重寫,過載,重定義
1. 重寫 (override):(又稱覆蓋)
父類與子類之間的多型性。子類重新定義父類中有相同名稱和引數的虛函式。
1) 被重寫的函式不能是 static 的。必須是 virtual 的,或者是 override 的 ( 即函式在最原始的基類中被宣告為 virtual , c++ 中沒有 override) 。
2) 重寫函式必須有相同的型別,名稱和引數列表 (即相同的函式原型)
3) 重寫函式的訪問修飾符可以不同。儘管 virtual 是 private 的,派生類中重寫改寫為 public,protected 也是可以的 ( 這點與 c# 完全不同 )
注:一旦子類重寫了基類某個虛函式,則基類其他同名函式都將被隱藏。
2. 過載 (overload):
指函式名相同,但是它的參數列列個數或順序,型別不同。但是不能靠返回型別來判斷。僅僅只有型別不同,不是過載。
3. 重定義 (redefining):
子類重新定義父類中有相同名稱的非虛函式 ( 引數列表可以不同,重新定義虛函式是重寫) 。
重定義後子類呼叫的函式是子類自己的函式,父類的函式會被隱藏。名字隱藏特性。如果想呼叫父類的該同名函式,需要用父類加上作用域來指定呼叫的函式。
過載與覆蓋的區別 (override) pk (overload)
1、方法的覆蓋是子類和父類之間的關係,是垂直關係;方法的過載是同乙個類中方法之間的關 系,是水平關係。
2、覆蓋要求引數列表相同;過載要求引數列表不同。
3、覆蓋關係中,呼叫那個方法體,是根據物件的型別(物件對應儲存空間型別)來決定;過載關係,是根據呼叫時的實參表與形參表來選擇方法體的。
class base
void f1(string a) ;
class derivea:public base;
class deriveb:public base
;int main()
注意:在 c++ 中若基類中有乙個函式名被過載,在子類中重定義該函式(基類為虛函式),或新增乙個同名函式版本(該版本在基類中無相應虛函式,李飛注),則基類的所有 過載版本將被隱藏——即子類只能用子類定義的,基類的不再可用。——名字隱藏特性。
C 函式過載 重寫 重定義
c 中經常會提到過載,除了過載,還有重寫,重定義,下面對這三個概念逐一進行區分 1 過載 函式過載是同一定義域中 即同乙個類中 的同名函式,但形參的個數必須不同,包括引數個數,型別和順序,不能僅通過返回值型別的不同來過載函式 include using namespace std class box...
C 過載重寫重定義
includeusing namespace std 函式過載 必須在同乙個類中進行 子類無法過載父類的函式,父類同名函式將被名稱覆蓋 過載是在編譯期間根據引數型別和個數決定函式呼叫 函式重寫 必須發生於父類和子類之間 並且父類和子類中的函式必須有完全相同的原型 使用virtual宣告之後能夠產生多...
C 過載 重寫 重定義
指函式名相同,但是它的參數列列個數或順序,型別不同。但是不能靠返回型別來判斷。1 相同的範圍 在同乙個作用域中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。5 返回值可以不同 是指派生類重新定義基類的虛函式,特徵是 1 不在同乙個作用域 分別位於派生類與基類 2 函式名字相同...