【C++深度剖析教程23】继承中的访问级别
本C++課程學習記錄,完全來源于狄泰軟件學院的相關課程,想一起學習的加我q1126137994或者q群199546072
給你推薦更多相關課程。
今天學習C++中繼承的訪問級別。首先我們思考一個問題,子類是否可以直接訪問父類的私有成員???
我們可以看看下圖的思考過程:
可以看出,兩者互相矛盾,那么實際上是什么樣呢?我們只有讓編譯器告訴我們了:
看下面的程序:
編譯顯示有錯誤:
由結果顯示知:我們的子類不能訪問父類的私有成員!!!但是我們上一篇文章也說了,我們的子類是需要繼承父類所有的屬性與行為的。
所以在C++中,類中還定義了一種訪問級別protected,被protected修飾的成員可以被子類訪問,而不能被其他類訪問。
- 面向對象中的訪問級別不只是private和public
- 可以定義protected的訪問級別
- protected修飾的成員不能被外界直接訪問
- protected修飾的成員可以被子類直接訪問
下面我們看一個例子來理解protected的訪問級別:
#include <iostream> #include <string>using namespace std;class Parent { protected:int mv; public:Parent(){mv = 100;}int value(){return mv;} };class Child : public Parent { public:int addValue(int v){mv = mv + v; } };int main() { Parent p;cout << "p.mv = " << p.value() << endl;// p.mv = 1000; // errorChild c;cout << "c.mv = " << c.value() << endl;c.addValue(50);cout << "c.mv = " << c.value() << endl;// c.mv = 10000; // errorreturn 0; }運行結果為:
p.mv = 100
c.mv = 100
c.mv = 150
由運行結果,以及代碼的分析,知protected修飾的成員可以被子類訪問。
由此我們可以得出一個對于定義類時的一個訪問級別的的選擇的流程框圖:
最后我們做一個綜合性的聯系,結合類的組合與類的繼承,完成下圖的程序
上圖是實現實體,直線,點,這三個類的組合關系,與繼承關系,代碼如下:
運行結果為:
Object
Point
P(1, 2)
Line
Line from P(1, 2) to P(5, 6)
由以上的程序分析總結:
- protected修飾的成員不能被外界所訪問
- protected修飾的成員使得子類可以訪問父類的成員
- protected是專門為繼承而專門設計的
- 沒有protected就無法完成真正意義上的代碼復用
想一起探討以及獲得各種學習資源加我(有我博客中寫的代碼的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流關于嵌入式,操作系統,C++語言,C語言,數據結構等技術問題。
總結
以上是生活随笔為你收集整理的【C++深度剖析教程23】继承中的访问级别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何操作才能实现音频合并无缝衔接?只要掌
- 下一篇: php gmssl,关于GmSSL