C 中類中為繼承而生的訪問級別 protect

2021-08-22 13:40:52 字數 1447 閱讀 5785

到目前為止,我們知道,c++類中成員的訪問級別有public與private,public公有級別能被外界直接訪問,private只能被在類內部和類成員函式訪問,不能被外界直接訪問。但是我們又知道,子類繼承父類後,便擁有了父類的所有屬性,那麼這個時候,子類能直接訪問父類的私有成員嗎?

- 從物件導向的理論:子類擁有父類的所有屬性,能直接訪問父類的私有成員

- 從c++語法分析:private屬性的成員不能直接被外界訪問

二者看似矛盾,下邊我們就以**來驗證:

#include #include using namespace std;

class parent

public:

int m_value2;

void fun2()

};class child : public parent

};int main()

編譯一下:

從編譯結果看,子類是無法直接訪問父類的私有成員的

在c++類中,成員除了有public與private屬性外,還有protect(保護)屬性,用protect修飾的成員,跟私有成員一樣,無法被外界直接訪問,但是能被子類直接訪問。也可以說,protect就是專門為繼承而生的。下邊我們把上述**中的private屬性改為protect屬性

#include #include using namespace std;

class parent

public:

int m_value2;

void fun2()

};class child : public parent

};int main()

編譯輸出:

從輸出結果可以看到,在子類中,是直接能訪問父類的protect屬性成員變數與成員函式的。

總結:-c++物件導向中的訪問級別除了publicprivate外,還有protect

-protect修飾的成員不能被外界所訪問

-protect修飾的成員能被子類直接訪問

-protect關鍵字是為了繼承而專門設計的

-沒有protect就無法完成真正意義上的**復用

繼承中的訪問級別

繼承的概念之前的文章已經提及了,那麼子類是否可以直接訪問父類的私有成員呢,答案是否定的 例子 include include using namespace std class parent intvalue class child public parent int main 結果 a.cpp 在...

C 中類的訪問級別

class program private class a1 internal class a3 protected class a4 static void main string args internal class a3 當本類 任何型別的類public private的無關 型別的時候,類...

C 中類的訪問級別

class program private class a1 internal class a3 protected class a4 static void main string args internal class a3 當本類 任何型別的類public private的無關 型別的時候,類...