在c++的類中函式定義的時候會有 過載,覆蓋(也成為重寫),隱藏(也成為重定義)三種情況下面說說他們的區別,以及一些注意事項:
學習c++中的類,主要有兩種,一種是用struct 關鍵字 定義的,預設情況下類中的成員是public屬性,而另一種使用class 關鍵字 定義的預設是private屬性的。
子類在繼承的時候會將父類中的public protect private資源全部繼承,但是在子類中是不能訪問private 的資源的,至少是不能直接訪問的,可以通過public 的函式來實現訪問。
c++中定義類的時候,佔據空間的主要是包含類中的成員變數,而類中的成員函式是不占用空間的,但是虛函式占用乙個4位元組大小的空間,這是乙個虛函式表指標,是乙個定義了類中的虛函式的位址的表,能夠解決類中的多型,覆蓋,繼承中的問題。
1、過載(overload)
首先,過載是發生在同乙個作用域中,也就是同乙個類中。而不是基類和子類中,用來實現多型機制。
過載發生的條件:
a:在同乙個類中的 兩個函式的 函式名必須相同,函式引數必須不同,返回值型別可以相同也可以不同;
注意:
2、覆蓋
首先、覆蓋發生在子類和基類之間,是子類的函式覆蓋掉了父類的函式,因為在繼承的時候子類會將父類中的一些有許可權繼承的資源,全部繼承下來,當子類中需要對一些函式重新定義的時候則有可能發生覆蓋或者隱藏,因為覆蓋的發生需要一些特定的條件
條件:a:
重寫的函式和被重寫的函式必須為virtual函式,分別位於基類和派生類中;
b:重寫的函式和被重寫的函式函式名和函式引數必須一致;
c:重寫的函式和被重寫的函式返回值相同,或者都返回指標或引用,並且派生類虛函式所返回的指標或引用的型別是基類中被替換的虛函式所返回的
指標或引用的型別的子型別。
注意:
3、隱藏
子類重新定義了父類中的非虛函式,遮蔽掉了父類中的同名函式;
條件:注意:
C 筆記 函式過載 覆蓋 隱藏
過載 overload 同乙個類中,函式名字相同,引數不同 引數型別和個數 virtual可有可無 返回值這個條件不構成過載 覆蓋 override,重寫 子類函式覆蓋父類函式,函式名字相同,引數相同,基類函式必須有virtual關鍵字,子類virtual可有可無隱藏 子類函式把父類函式隱藏,函式名...
c 過載 覆蓋 隱藏
成員函式的過載 覆蓋與隱藏 成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚 概念,否則錯誤將防不勝防。8.2.1 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函...
c 過載 覆蓋 隱藏
成員函式的過載 覆蓋與隱藏 成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚 概念,否則錯誤將防不勝防。8.2.1 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函...