C++ 學習之繼承1:基類與派生類

面向對象編程OOP(object-oriented programming)的關鍵思想是多態性。C++中多態性用於通過繼承而相關聯的類型的引用或指針。

首先看看基本的基類和派生類,以C++ primer中一個程序段爲例:

在基類Item_base中我們可以看到,這裏面存在public、protected和private三種訪問控制標號。public成員可以被一切用戶代碼所訪問;protected成員可以由基類及派生類訪問,但不能由普通用戶代碼訪問;private成員可以由基類和友元訪問;其實派生類對基類成員的訪問是由基類中的成員訪問控制級別和派生類派生列表中使用的訪問標號共同控制的,其中的派生類列表時如下形式的:

calss classname : access-label base-calss-name.可以參見圖中的Bulk_item繼承Item_base的寫法。其中的access-label 有public、protected和private三種。

不管上面哪種繼承,如果是基類中的private,派生類是不能訪問的。對於積累中的public成員和protected成員,當public繼承時,性質不變,當protected繼承時,基類中的public和protected成員都會變爲protected的,當private繼承時,基類的所有成員在派生類中都是private成員。總之一句話,派生類可以對所繼承的基類成員的訪問控制做進一步約束,但是不能放鬆。同時,當派生類對基類成員整體做進一步約束的時候,也可以對個別基類成員的訪問權限進行恢復,但是最多不能比基類中的權限更寬鬆。如上面的Bulk_item1以private形式繼承Item_base類,則原基類中的成員在Bulk_item1中都是private的,此時想要恢復基類中的isbn訪問權限,但是因爲isbn在基類中的訪問權限爲protected的,因此最多能恢復到protected的,而不能更寬鬆到public的。

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