首先要明確一下:
1.這三個關鍵字在兩種地方會用到,一個是對類的成員變量和成員函數修飾時(比如私有的成員變量,受保護的成員變量·,公有的函數),還有一種是對繼承方式的修飾(比如公有繼承,保護繼承)。
2.這三個關鍵字在對成員變量或成員函數修飾時表示外部(與內部相對,若一個類包括一個.h文件和.cpp文件,出了這兩個文件就是外部了)對該成員的訪問權限。在內部的話顯然都是可以訪問的。
下面我將舉一個例子在說明這些關鍵字的運用和理解:
class A
{
public:
A();
~A();
void funA();
private:
void funB();
public:
int a;
protected:
int b;
private:
int c;
};
先仔細看清楚外部(由該類在其他地方實例化的對象也屬於外部,私有的和受保護的也不能訪問)在訪問該類各個成員變量和成員函數的訪問權限,public修飾的都可以訪問,private和protected修飾的不可以訪問。
接下來是跟繼承聯系起來(這在C++)開發中是不可避免的:
class B : public A(公有繼承)
{
public:
B();
~B();
private:
int d;
}
這個時候,在B類內部,可以訪問到A類的public成員和protected成員,其private成員不可訪問,但是並不意味着A類的private成員不可繼承,當你實例化B類對象的時候,其對象內存結構里也會有A類的private成員。
說說protected這個關鍵字的事吧!
其實private和public在修飾上已經很全面了,但是由於繼承的關系,protected出現了。
父類的某個成員變量不想讓外部訪問,可以用private修飾,但是這樣的話子類也就無法訪問該成員變量,為了同時滿足這兩種需求,protected關鍵字應運而生。
protected關鍵字存在的意義,就在於可以讓父類的protected成員既不能被外部訪問,但又能被子類(內部)來訪問。