1. private:只能由1.該類中的函數、2.其友元函數訪問。不能被任何其他訪問,該類的對象也不能訪問。
2. protected:可以被1.該類中的函數、2.子類的函數、以及3.其友元函數訪問。但不能被該類的對象訪問。
3. public:可以被1.該類中的函數、2.子類的函數、3.其友元函數訪問,也可以由4.該類的對象訪問。
4. 注:友元函數包括3種:設爲友元的普通的非成員函數;設爲友元的其他類的成員函數;設爲友元類中的所有成員 函數。
另外:類的繼承後方法屬性變化。
5. private 屬性不能夠被繼承。使用private繼承,父類的protected和public屬性在子類中變爲private;
6. 使用protected繼承,父類的protected和public屬性在子類中變爲protected;
7. 使用public繼承,父類中的protected和public屬性不發生改變;
8. 如下所示:
public: | protected: | private: | |
public繼承 | public | protected | 不可用 |
protected繼承 | protected | protected | 不可用 |
private繼承 | private | private | 不可用 |
12. protected繼承和private繼承能降低訪問權限。
而在C++中繼承主要有三種關係:public、protected和private。這三種繼承關係中public繼承是最爲常用的一種繼承關係,private繼承是最少見的繼承關係。
1. public
public繼承是一種接口繼承,根據面向對象中的關係而言就是,派生類可以代替基類完成基類接口所聲明的行爲.
從語法角度上來說,public繼承會保留基類中成員(包括函數和變量等)的可見性不變,也就是說,基類的public成員爲派生類的public成員,基類的protected成員爲派生類的protected成員。
2. protected
從語義角度上來說,protected繼承是一種實現繼承。
從語法角度上來說,protected繼承會將基類中的public可見性的成員修改成爲protected可見性,相當於在派生類中引入了protected成員,這樣一來在派生類中同樣還是可以調用基類的protected和public成員,派生類的派生類就也可以調用被protected繼承的基類的protected和public成員。
例如:
class CSample1 {
protected:
void printProtected() {}
public:
void printPublic() {}
};
class CSample2 : protected CSample1 {};
class CSample3 : public CSample2 {
void print3() {
printProtected();
printPublic();
}
};
3. private從語義角度上來說,private繼承是一種實現繼承,private繼承會將基類中的public和protected可見性的成員修改成爲private可見性,這樣一來雖然派生類中同樣還是可以調用基類的protected和public成員,但是在派生類的派生類就不可以再調用被private繼承的基類的成員了。
class CSample1 {
protected:
void printProtected() {}
public:
void printPublic() {}
};
class CSample2 : private CSample1 {};
class CSample3 : public CSample2 {
void print3() {
printProtected(); // 編譯錯誤,不可以調用該函數
printPublic(); // 編譯錯誤,不可以調用該函數
}
};