C++編程中私有和保護(hù)以及公有的類成員訪問控制
private
語法
private: [member-list] private base-class
備注
當(dāng)位于類成員列表之前時(shí),private 關(guān)鍵字指定這些成員僅可從成員函數(shù)和該類的友元中進(jìn)行訪問。這適用于聲明到下一個(gè)訪問指示符或類的末尾的所有成員。
當(dāng)位于基類的名稱之前時(shí),private 關(guān)鍵字指定基類的公共成員和受保護(hù)成員為派生類的私有成員。
類中成員的默認(rèn)訪問是私有的。結(jié)構(gòu)或聯(lián)合中成員的默認(rèn)訪問是公共的。
基類的默認(rèn)訪問對于類是私有的,而對于結(jié)構(gòu)是公共的。 聯(lián)合不能具有基類。
例子
// keyword_private.cpp
class BaseClass {
public:
// privMem accessible from member function
int pubFunc() { return privMem; }
private:
void privMem;
};
class DerivedClass : public BaseClass {
public:
void usePrivate( int i )
{ privMem = i; } // C2248: privMem not accessible
// from derived class
};
class DerivedClass2 : private BaseClass {
public:
// pubFunc() accessible from derived class
int usePublic() { return pubFunc(); }
};
int main() {
BaseClass aBase;
DerivedClass aDerived;
DerivedClass2 aDerived2;
aBase.privMem = 1; // C2248: privMem not accessible
aDerived.privMem = 1; // C2248: privMem not accessible
// in derived class
aDerived2.pubFunc(); // C2247: pubFunc() is private in
// derived class
}
protected
語法
protected: [member-list] protected base-class
備注
protected 關(guān)鍵字指定對 member-list 中的成員直到下一個(gè)訪問說明符(public 或 private)或類定義的末尾的訪問。只能通過以下項(xiàng)使用聲明為 protected 的類成員:
最初聲明這些成員的類的成員函數(shù)。
最初聲明這些成員的類的友元。
使用公共或受保護(hù)訪問(派生自最初聲明這些成員的類)派生的類。
也對受保護(hù)成員具有專用訪問權(quán)限的以私有方式派生的直接類。
當(dāng)以基類的名稱開頭時(shí),protected 關(guān)鍵字指定基類的公共成員和保護(hù)成員是其派生類的保護(hù)成員。
保護(hù)成員不像 private 成員那樣專用,private 成員僅對從中聲明它們的類的成員可訪問,但保護(hù)成員也不像 public 成員那樣公開,public 成員在任何函數(shù)中均可訪問。
也聲明為 static 的保護(hù)成員對派生類的任何友元或成員函數(shù)均可訪問。也聲明為 static 的保護(hù)成員對派生類中的友元或成員函數(shù)可訪問,但只能通過指向派生類的指針、對派生類的引用或派生類的對象。
例子
// keyword_protected.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class X {
public:
void setProtMemb( int i ) { m_protMemb = i; }
void Display() { cout << m_protMemb << endl; }
protected:
int m_protMemb;
void Protfunc() { cout << "\nAccess allowed\n"; }
} x;
class Y : public X {
public:
void useProtfunc() { Protfunc(); }
} y;
int main() {
// x.m_protMemb; error, m_protMemb is protected
x.setProtMemb( 0 ); // OK, uses public access function
x.Display();
y.setProtMemb( 5 ); // OK, uses public access function
y.Display();
// x.Protfunc(); error, Protfunc() is protected
y.useProtfunc(); // OK, uses public access function
// in derived class
}
public
語法
public: [member-list] public base-class
備注
當(dāng)位于類成員列表前面時(shí),public 關(guān)鍵字指定這些成員可從任何函數(shù)訪問。這適用于聲明到下一個(gè)訪問指示符或類的末尾的所有成員。
當(dāng)位于基類名稱前面時(shí),public 關(guān)鍵字指定基類的公共和受保護(hù)成員分別是派生類的公共成員和受保護(hù)成員。
類中成員的默認(rèn)訪問是私有的。結(jié)構(gòu)或聯(lián)合中成員的默認(rèn)訪問是公共的。
基類的默認(rèn)訪問對于類是私有的,而對于結(jié)構(gòu)是公共的。 聯(lián)合不能具有基類。
例子
// keyword_public.cpp
class BaseClass {
public:
int pubFunc() { return 0; }
};
class DerivedClass : public BaseClass {};
int main() {
BaseClass aBase;
DerivedClass aDerived;
aBase.pubFunc(); // pubFunc() is accessible
// from any function
aDerived.pubFunc(); // pubFunc() is still public in
// derived class
}
相關(guān)文章
C++ 數(shù)據(jù)結(jié)構(gòu) 堆排序的實(shí)現(xiàn)
這篇文章主要介紹了C++ 數(shù)據(jù)結(jié)構(gòu) 堆排序的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-06-06
C語言鏈表實(shí)現(xiàn)工資管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言鏈表實(shí)現(xiàn)工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C語言中字符的輸入輸出以及計(jì)算字符個(gè)數(shù)的方法詳解
這篇文章主要介紹了C語言中字符的輸入輸出以及計(jì)算字符個(gè)數(shù)的方法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11
C++實(shí)現(xiàn)簡易的通訊錄管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易的通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
C語言 詳細(xì)解析時(shí)間復(fù)雜度與空間復(fù)雜度
算法復(fù)雜度分為時(shí)間復(fù)雜度和空間復(fù)雜度。其作用: 時(shí)間復(fù)雜度是度量算法執(zhí)行的時(shí)間長短;而空間復(fù)雜度是度量算法所需存儲(chǔ)空間的大小2022-04-04
基于Matlab實(shí)現(xiàn)繪制3D足球的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Matlab實(shí)現(xiàn)繪制3D足球,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下2022-11-11

