類成員的訪問權限
1.jpg
繼承方式
2.jpg
- 派生類的成員(及友元)對基類成員的訪問權限只與基類中的訪問說明符有關。派生列表中訪問說明符的作用是控制派生類用戶對于基類成員的訪問權限棋蚌,注意是派生類的用戶。
- 基類成員在派生類中的訪問權限不得高于繼承方式中指定的權限脱惰。也就是說逢并,繼承方式中的 public、protected够吩、private 是用來指明基類成員在派生類中的最高訪問權限的。
- 不管繼承方式如何丈氓,基類中的 private 成員在派生類中始終不能使用(不能在派生類的成員函數(shù)中訪問或調(diào)用)周循。如果希望基類的成員能夠被派生類繼承并且毫無障礙地使用,那么這些成員只能聲明為 public 或 protected万俗;只有那些不希望在派生類中使用的成員才聲明為 private湾笛。
- 如果希望基類的成員既不向外暴露(不能通過對象訪問),還能在派生類中使用闰歪,那么只能聲明為 protected嚎研。
- 實際上,基類的 private 成員是能夠被繼承的库倘,并且(成員變量)會占用派生類對象的內(nèi)存临扮,它只是在派生類中不可見,導致無法使用罷了教翩。private 成員的這種特性杆勇,能夠很好的對派生類隱藏基類的實現(xiàn),以體現(xiàn)面向?qū)ο蟮姆庋b性饱亿。
- 在派生類中訪問基類 private 成員的唯一方法就是借助基類的非 private 成員函數(shù)蚜退,如果基類沒有非 private 成員函數(shù),那么該成員在派生類中將無法訪問(除非使用下面講到的 using 關鍵字)彪笼。
使用using聲明
通過在類的內(nèi)部使用using聲明語句钻注,我們可以將該類的直接或間接基類中的任何可訪問成員(非私有成員)標記出來,改變其訪問權限杰扫。
class A{
protected:
string name;
};
class B:publicA{
public:
using A::name;//將繼承來的name成員的訪問權限改為public
};
int main()
{
A me;
me.name="aaaaa";//可以訪問name成員了
cout<<me.name<<endl;
return 0;
}