繼承與派生

三種方式在這裏插入圖片描述

在派生類中訪問基類 private 成員的唯一方法就是藉助基類的非 private 成員函數,如果基類沒有非 private 成員函數,那麼該成員在派生類中將無法訪問。

C++繼承時的名字遮蔽問題

派生類的成員(成員函數和成員變量)和基類重名時,會遮蔽基類繼承過來的成員,使用的實際上是派生類的。除非特定指明。因爲會造成遮蔽,所以基類成員
函數和派生類成員函數不會構成函數重載

注意:成員變量即使被遮蔽,也會在內存上開闢空間。

作用域嵌套

在這裏插入圖片描述
從內向外一層一層找,一個作用域內的同名函數才具有重載關係,不同作用域內的同名函數是會造成遮蔽,使得外層函數無效。

基類和派生類的構造函數

派生類應該完成成員變量的初始化,但基類中的private成員對象派生內只能通過成員函數纔有可能訪問到,那派生類是如何來初始化的呢?

在派生類的構造函數中調用基類的構造函數。如果不調用則
使用基類的默認構造函數。

注意:

  • 派生類的構造函數一定是先執行基類的構造函數後,再執行其他成員變量的初始化。
  • 當A ->B ->C A派生B派生C,那麼c的構造函數中就只需要調用B的構造函數(直接基類)不用再調動A的構造函數

析構函數:
編譯器會自己調用B A的析構函數,並且先構造的後析構
creat A
creat B
creat C
destroy C
destroy B
destory A

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章