個人總結之過載 重定義 重寫的區別

2021-10-07 21:36:49 字數 1050 閱讀 6220

c++中發生繼承時,常常或伴隨著子類和父類之間函式或是資料成員的複製、重定義、重寫;或是在本類中發生過載;

當發生繼承時,子類將會 複製父類 的全部成員;因此我們可以認為在子類中存在兩個域:子類域、父類域;

包括函式過載、運算子過載

隱藏是指派生類的函式遮蔽了與其同名的基類函式。注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏,而不是在派生類中發生過載。

在函式被virtual修飾的情況下,且父子類被virtual修飾的成員函式型別必須一摸一樣,即引數列表和返回型別都必須一致(返回型別允許協變)。子類物件呼叫時,會直接呼叫子類域中的成員函式,父類域中的該同名成員就像不存在一樣,(可以顯示呼叫)即父類該成員被子類成員覆蓋。這個就是我們說的發生多型來根據物件的型別決定呼叫的成員;但存在一種例外:就是 如果返回型別是 基類的引用或是指標,則可以修改為指向派生類的引用或是指標,這種允許返回型別隨類型別的變化而變化的特性稱為返回型別協變

過載發生在同乙個作用域內(同乙個類中),virtual關鍵字可有可無,兩個函式的返回值型別可同可不同,

函式名字必須相同,引數列表必須不同(函式特徵:引數型別、個數、順序);在函式後面加上const關鍵字修飾同樣可以造成函式的過載。 

重定義(隱藏、遮掩)不在同乙個作用域(分別位於派生類與基類)發生,virtual關鍵字可有可無,返回值型別可以不同,

函式名字必須相同,引數可不同也可相同。

重寫(覆蓋)不在同乙個作用域(分別位於派生類與基類)發生,

基類函式必須有 virtual 關鍵字修飾,返回值相同(或是協變) ,函式名字相同,引數列表相同。也即派生類的方法應與原來的函式完全相同(函式體內容除外)

重寫重載重定義的區別

重寫的兩種情況 如果函式重寫,在父類中增加了virtual關鍵字,將能產生多型,叫重寫 如果函式重寫,沒有加virtual關鍵字,相當於在子類中重定義,不會發生多型。會發生多型的叫重寫,不重發生多型的叫重定義,重寫 重定義 一定是發生在兩個類的情況下,而過載一定是發生在同乙個類中.還有一種現象值得注...

C 重寫重載重定義區別

過載overload 是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回型別來判斷。重寫override 也叫做覆蓋。子類重新定義父類中有相同名稱和引數的虛函式。函式特徵相同。但是具體實現不同,主要是在繼承關係中出現的 重寫需要注意 1 被重寫的函式不能是static的。必須是vir...

C 重寫重載重定義區別

用的時候老是忘記。特此記下。過載overload 是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回型別來判斷。重寫override 也叫做覆蓋。子類重新定義父類中有相同名稱和引數的虛函式。函式特徵相同。但是具體實現不同,主要是在繼承關係中出現的 重寫需要注意 1 被重寫的函式不能是...