C++中的public,private,protected訪問

當private,public,protected單純的作爲一個類中的成員權限設置時:
private: 只能由該類中的函數、其友元函數訪問,不能被任何其他訪問,該類的對象也不能訪問. 

protected: 可以被該類中的函數、子類的函數、以及其友元函數訪問,但不能被該類的對象訪問 

public: 可以被該類中的函數、子類的函數、其友元函數訪問,也可以由該類的對象訪問
注:友元函數包括兩種:設爲友元的全局函數,設爲友元類中的成員函數

當private,public,protected作爲繼承方式時:

對於公有繼承方式: 
(1)父類的public成員成爲子類的public成員,允許類以外的代碼訪問這些成員
(2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
(3)父類的protected成員成爲子類的protected成員,只允許子類成員訪問;

(1) 基類成員對其對象的可見性: 

公有成員可見,其他不可見。這裏保護成員同於私有成員。 

(2) 基類成員對派生類的可見性: 

公有成員和保護成員可見,而私有成員不可見。這裏保護成員同於公有成員。 

(3) 基類成員對派生類對象的可見性: 

公有成員可見,其他成員不可見。 

所以,在公有繼承時,派生類的對象可以訪問基類中的公有成員;派生類的成員函數可以訪問基類中的公有成員和保護成員。這裏,一定要區分清楚派生類的對象和派生類中的成員函數對基類的訪問是不同的。 

對於私有繼承方式: 

(1)父類的public成員成爲子類的private成員,只允許子類成員訪問
(2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
(3)父類的protected成員成爲子類的private成員,只允許子類成員訪問;


(1) 基類成員對其對象的可見性: 

公有成員可見,其他成員不可見。 

(2) 基類成員對派生類的可見性: 

公有成員和保護成員是可見的,而私有成員是不可見的。 

(3) 基類成員對派生類對象的可見性: 

所有成員都是不可見的。 

所以,在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。 

對於保護繼承方式: 

(1)父類的public成員成爲子類的protected成員,只允許子類成員訪問
(2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
(3)父類的public成員成爲子類的protected成員,只允許子類成員訪問;


這種繼承方式與私有繼承方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性。 

上述所說的可見性也就是可訪問性。關於可訪問性還有另的一種說法。這種規則中,稱派生類的對象對基類訪問爲水平訪問,稱派生類的派生類對基類的訪問爲垂直訪問。 

一般規則如下: 

公有繼承時,水平訪問和垂直訪問對基類中的公有成員不受限制; 
私有繼承時,水平訪問和垂直訪問對基類中的公有成員也不能訪問; 
保護繼承時,對於垂直訪問同於公有繼承,對於水平訪問同於私有繼承。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章