到目前為止,我們知道,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++物件導向中的訪問級別除了public、private外,還有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的無關 型別的時候,類...