標籤:
對於公有繼承方式:
(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成員,只允許子類成員訪問;
這種繼承方式與私人繼承方式的情況相同。兩者的區別僅在於對衍生類別的成員而言,對基類成員有不同的可見度。
上述所說的可見度也就是可訪問性。關於可訪問性還有另的一種說法。這種規則中,稱衍生類別的對象對基類訪問為水平訪問,稱衍生類別的衍生類別對基類的訪問為垂直訪問。
一般規則如下:
公有繼承時,水平訪問和垂直訪問對基類中的公有成員不受限制;
私人繼承時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;
保護繼承時,對於垂直訪問同於公有繼承,對於水平訪問同於私人繼承。
C++中public,protected,private訪問