C++中public、protect、private的訪問權限控制
訪問權限
一個類的public成員變量、成員函數,可以通過類的成員函數、類的實例變量進行訪問
一個類的protected成員變量、成員函數,無法通過類的實例變量進行訪問。但是可以通過類的友元函數、友元類進行訪問。
一個類的private成員變量、成員函數,無法通過類的實例變量進行訪問。但是可以通過類的友元函數、友元類進行訪問。
繼承權限
public繼承
派生類通過public繼承,基類的各種權限不變 。
派生類的成員函數,可以訪問基類的public成員、protected成員,但是無法訪問基類的private成員。
派生類的實例變量,可以訪問基類的public成員,但是無法訪問protected、private成員,仿佛基類的成員之間加到了派生類一般。
可以將public繼承看成派生類將基類的public,protected成員囊括到派生類,但是不包括private成員。
protected繼承
派生類通過protected繼承,基類的public成員在派生類中的權限變成了protected 。protected和private不變。
派生類的成員函數,可以訪問基類的public成員、protected成員,但是無法訪問基類的private成員。
派生類的實例變量,無法訪問基類的任何成員,因為基類的public成員在派生類中變成了protected。
可以將protected繼承看成派生類將基類的public,protected成員囊括到派生類,全部作為派生類的protected成員,但是不包括private成員。
private成員是基類內部的隱私,除了友元,所有人員都不得窺探。派生類的友元,都不能訪問
private繼承
派生類通過private繼承,基類的所有成員在派生類中的權限變成了private。
派生類的成員函數,可以訪問基類的public成員、protected成員,但是無法訪問基類的private成員。
派生類的實例變量,無法訪問基類的任何成員,因為基類的所有成員在派生類中變成了private。
可以將private繼承看成派生類將基類的public,protected成員囊括到派生類,全部作為派生類的private成員,但是不包括private成員。
private成員是基類內部的隱私,除了友元,所有人員都不得窺探。派生類的友元,都不能訪問
總結:繼承修飾符,就像是一種篩子,將基類的成員篩到派生類。public、protected、private,就是篩子的眼。
通過public繼承,所有基類成員(除了private),public、protected都到了派生類里面,public篩眼比較大,不會改變訪問權限。
通過protected繼承,所有基類成員(除了private),public、protected都到了派生類里面,protected篩眼大小適中,所有過來的成員都變成了protected。
通過private繼承,所有基類成員(除了private),public、protected都到了派生類里面,private篩眼最小,所有過來的成員都變成了private。
繼承總結:
1.private 、protect 、public 繼承base類后,子類的成員函數都只能訪問base類中public、protect中的成員
2.子類實例化一個對象后,對象只能調用和訪問子類中的public成員(父類成員在子類中的訪問權限 1.看其在父類中的訪問權限 2.看子類繼承父類的權限)
成員:成員變量和成員函數。
