c++中發生繼承時,常常或伴隨著子類和父類之間函式或是資料成員的複製、重定義、重寫;或是在本類中發生過載;
當發生繼承時,子類將會 複製父類 的全部成員;因此我們可以認為在子類中存在兩個域:子類域、父類域;
包括函式過載、運算子過載
隱藏是指派生類的函式遮蔽了與其同名的基類函式。注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏,而不是在派生類中發生過載。
在函式被virtual修飾的情況下,且父子類被virtual修飾的成員函式型別必須一摸一樣,即引數列表和返回型別都必須一致(返回型別允許協變)。子類物件呼叫時,會直接呼叫子類域中的成員函式,父類域中的該同名成員就像不存在一樣,(可以顯示呼叫)即父類該成員被子類成員覆蓋。這個就是我們說的發生多型來根據物件的型別決定呼叫的成員;但存在一種例外:就是 如果返回型別是 基類的引用或是指標,則可以修改為指向派生類的引用或是指標,這種允許返回型別隨類型別的變化而變化的特性稱為返回型別協變。
過載發生在同乙個作用域內(同乙個類中),virtual關鍵字可有可無,兩個函式的返回值型別可同可不同,
函式名字必須相同,引數列表必須不同(函式特徵:引數型別、個數、順序);在函式後面加上const關鍵字修飾同樣可以造成函式的過載。
重定義(隱藏、遮掩)不在同乙個作用域(分別位於派生類與基類)發生,virtual關鍵字可有可無,返回值型別可以不同,
函式名字必須相同,引數可不同也可相同。
重寫(覆蓋)不在同乙個作用域(分別位於派生類與基類)發生,
基類函式必須有 virtual 關鍵字修飾,返回值相同(或是協變) ,函式名字相同,引數列表相同。也即派生類的方法應與原來的函式完全相同(函式體內容除外);
重寫重載重定義的區別
重寫的兩種情況 如果函式重寫,在父類中增加了virtual關鍵字,將能產生多型,叫重寫 如果函式重寫,沒有加virtual關鍵字,相當於在子類中重定義,不會發生多型。會發生多型的叫重寫,不重發生多型的叫重定義,重寫 重定義 一定是發生在兩個類的情況下,而過載一定是發生在同乙個類中.還有一種現象值得注...
C 重寫重載重定義區別
過載overload 是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回型別來判斷。重寫override 也叫做覆蓋。子類重新定義父類中有相同名稱和引數的虛函式。函式特徵相同。但是具體實現不同,主要是在繼承關係中出現的 重寫需要注意 1 被重寫的函式不能是static的。必須是vir...
C 重寫重載重定義區別
用的時候老是忘記。特此記下。過載overload 是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回型別來判斷。重寫override 也叫做覆蓋。子類重新定義父類中有相同名稱和引數的虛函式。函式特徵相同。但是具體實現不同,主要是在繼承關係中出現的 重寫需要注意 1 被重寫的函式不能是...