7.类的访问控制和继承
在C++中,我們使用訪問說明符加強類的封裝性。
訪問說明符有:public、private、protected
1)定義在public說明符之后的成員在整個程序內可以被訪問,public成員定義類的接口。
2)定義在private說明符之后的成員可以只能由類的接口訪問,private部分封裝了(隱藏了)類的實現細節。
3)由于我們定義的類希望某些成員可以在類的繼承過程中和派生類分享,而不被其他公共部分訪問,因此便設定protected說明符。定義在protected訪問符之后的成員,常用于派生類和友元。
什么是友元?
友元分友元函數和友元類。類與類或函數之間要進行某些相關操作,就要用到友元!有時需要定義一些函數,這些函數不是類的一部分,但又需要頻繁地訪問類的數據成員,這時可以將這些函數定義為該類的友元函數。除了友元函數外,還有友元類,兩者統稱為友元。?如果一個類指定了友元類,則友元類的成員函數可以訪問包括此類非公有成員在內的所有成員!友元能夠使得普通函數直接訪問類的保護數據,避免了類成員函數的頻繁調用,可以節約處理器開銷,提高程序的效率,但所矛盾的是,即使是最大限度的保護,同樣也破壞了類的封裝特性,這即是友元的缺點。
使用友元類時注意:
(1) 友元關系不能被繼承。?
(2) 友元關系是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的聲明。
(3) 友元關系不具有傳遞性。若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應的聲明。
?
其實在C++中,struct和class的差別也在于此!class可以看成是struct的加強版
struct的默認訪問說明符是public,默認public繼承;class的默認訪問說明符是private,默認private繼承
在繼承機制中,有派生訪問說明符。分為:public、private、protected
要深刻理解下面這兩句話:
1)派生訪問說明符對于派生類的成員(及友元)能否訪問其直接基類成員沒有什么影響。對基類成員的訪問權限只和基類的訪問說明符有關。
2)派生訪問說明符的目的是控制派生類對象(包括派生的派生)對于基類成員的訪問權限。(查看本博客C++模塊第8篇文章)
?
簡單測試一下:
using namespace std; class A {int a = 3; public:int fun() { int b = a; cout << a << endl; return a; } };class B:public A {using A::fun; public:void fun(int c) { int b = fun()+c; cout << b << endl; } };int main() {B b;b.fun(6);system("pause");return 0; }總的來說,派生類的對象想要訪問基類的某個成員,你得首先看看派生類對于基類的繼承形式是怎樣的!基類在不同的繼承形式下,它的成員在派生類中具有不同的訪問屬性!(查看本博客C++模塊第8篇文章);而派生類的成員或者友元要訪問其基類的成員函數時,只與基類中的訪問說明符有關!
總結
以上是生活随笔為你收集整理的7.类的访问控制和继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer:给定一个数组A[0,1,
- 下一篇: 8.公有继承 保护继承 私有继承