四 同名隱藏,繼承的特性 賦值相容規則

2021-10-02 19:14:52 字數 1870 閱讀 5923

目錄

一.子類中的函式同名隱藏

二.繼承的特性——賦值相容規則

1.同名隱藏的概念:設在某一繼承關係中,子類中有乙個和父類中同名的函式 show(),那麼子類在呼叫show()方法時,系統將呼叫子類的show()方法,而不會去呼叫父類的show()方法,這種現象叫做同名隱藏。(切記:這裡的show()方法不是我後面所說的多型,僅僅稱之為同名隱藏)。

例如:

2.同名隱藏的進一步討論:如果子類中有和父類中同名的函式,則在子類中將隱藏掉父類中所有的(記住是所有的)同名函式。例如,在上面例子中,父類中的show()方法有函式過載:show(int),則在子類中同樣會遮蔽掉show(int),

但是,事實上show(int)是被繼承下來了,只是被隱藏起來而已。

例如在上述例子中我們給父類中增加show(int)方法:

void show(int)

1.賦值相容規則:在任何需要基類物件的地方都可以用公有派生類的物件來代替,這條規則稱賦值相容規則。因為派生類的物件可以賦值給基類的物件,這時是把派生類物件中從對應基類中繼承來的隱藏物件賦值給基類物件。反過來不行,基類無法給派生類的新成員賦值。我們舉乙個簡單的例子來分析以下

#includeusing namespace std;

class base

~base()

private:

int x;

};class derive:public base

~derive()

private:

int y;

};int main()

在構造子類物件時,呼叫父類的建構函式構造了父類的無名物件(隱藏物件),所以,d物件包含兩個成員x、y

在用子類物件對父類物件賦值時,將子類物件的中隱藏的父類物件的成員x賦值給了新的父類物件的成員x,形象的稱之為

物件的切片。圖示。但是反過來,新構造的父類物件只有x成員,但是,子類物件有x和y 成員,故不能用父類物件給子類物件賦值。這種子類物件給基類物件賦值的現象也稱之為向上轉換。

2.可以將乙個派生類的物件的位址賦給其基類的指標變數,但只能通過這個指標訪問派生類中由基類繼承來的方法,不能訪問派生類中的新成員,這句話非常重要!!!同樣也不能反過來做。

例如:

int main()

/*假設給子類d增加list()方法,但是pb不能訪問list(),所以,pb指標其實只指向了子類物件中隱藏的父類物件。

void list()

/*假設給子類d增加list()方法

void list()

*/

同名隱藏與賦值相容規則

在繼承體系中我們的編寫派生類一般可分四個步驟 1 吸收基類成員 除建構函式和析構函式外全部接收 2 改造基類成員 宣告乙個和某基類成員的新成員,派生類中的新成員就遮蔽了基類同名成員稱為同名隱藏 3 發展新成員 派生類新成員必須與基類成員不同名,它的加入保證派生類在功能上有所發展 4 重寫建構函式和析...

ES6新特性四 變數的解構賦值例項

1.陣列的解構賦值 可以從數lohdsvgsi組中提取值,按照對應位置,對變數賦值 var a,b 1,2 a 1 b 2 下面是一些使用巢狀陣列進行解構 var d,c f 1,2 3 var third foo bar baz third baz var head,tail 1,2,3,4 he...

java學習(6)類的四大特性2之繼承(方法覆蓋)

筆記 方法覆蓋 一 例題 建立乙個動物類。動物有乙個方法,並且子類也有相同的方法。二 概念 子類的乙個方法和父類的乙個方法的名稱,返回型別,引數完全一樣,那麼我們稱子類的這個方法覆蓋了父類的那個方法。三 注意事項 1.子類的方法的返回型別,方法名稱,引數要和父類完全一樣,否則編譯出錯。2.子類方法不...