三種方式
在派生類中訪問基類 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