訪問權限:
- public 公共接口 :向外界開放,可經過對象或類名訪問
- protected 受保護的訪問:只向子類開放訪問權限 ,不可經過對象訪問
- private私有 :只有類成員能夠訪問,外界不能夠經過任何形式訪問
繼承關係:
- public繼承:父類成員的訪問權限在子類中不變,仍爲本身原來的權限。
- protected繼承:父類的public成員訪問權限在子類中變爲protected;父類的protected成員和private成員在子類權限維持原來的權限不變
- private繼承:父類的全部成員訪問權限在 子類中變爲private
其中,public繼承是is-a的關係,能夠用父類的指針或者引用指向子類的對象;protected和private繼承沒有is-a的關係,只表示「組合」或者「擁有」的關係,不能夠用父類的指針或引用指向子類對象。
C++對象模型中,子類對象的內存空間中包含父類的部分,當用父類指針指向一個子類的對象實時,這個指針能夠訪問的是相應的父類那部分的內存;在protected和private繼承的狀況下,父類的內存部分是私有的,不對外開放的,因此,protected和private繼承時,不能夠用父類的指針或引用指向子類對象。
經過對象訪問成員時,只能訪問到共有(Public)成員。 須要禁止類以構造形式實例化類的時候,能夠將類的構造函數聲明爲private 和protected 的形式。構造函數聲明protected 的形式的類不能被直接實例化,但能夠經過被繼承,子類能夠在實例化的時候調用父類的protected構造函數。 構造函數聲明爲private的類的實例化不能依賴構造函數,能夠提供public 的Instance()的方法,在Instance()定義中調用構造函數,返回類的實例。單例模式就是利用這個原理。