在C++中,子類繼承父類有三種繼承方式,分別是:public, protected和private。子類繼承的方式不同,那么子類對象訪問父類中的參數訪問權限也不同。
public 方式繼承:基類的private成員派生類不可見,基類中的protected和public成員在派生類中可以直接使用,並且變成了派生類中相應 的protected成員和public成員,但是只有public成員可以在派生類外使用。
protected 方式繼承:基類的private成員派生類不可見,基類的protected成員和public成員變成派生類的protected成員,這時在派生類 外不能使用基類的所有成員,包括public成員。
private 方式繼承:基類的private成員仍然為私有的,派生類不可見,基類中的protected成員和public成員成為了派生類中的private成 員,在派生類外不能使用基類中的任何成員。
下面我們通過例子來解釋上面的說法:
class A { public: int m_public; protected: int m_protected; private: int m_private; }; class B :public A { void SetPublic(int nPublic) { m_public = nPublic; //在派生類B中可以使用基類A中的public類型 } void SetProtected(int nProtected) { m_protected = nProtected; //在派生類B中可以使用基類A中的protected類型 } void SetPrivate(int nPrivate) { m_private = nPrivate; //錯誤,因為基類的private成員不能用 } }; B b; //創建B類的對象c b.m_public = 100; //正確 b.m_protected = 100; //錯誤,public繼承中基類的protected在派生類中是protected b.m_private = 100; //錯誤,在派生類中都不可以直接使用,在類外就更不能了 class C :protected A { void SetPublic(int nPublic) { m_public = nPublic; //在派生類C中可以使用基類A中的public類型 } void SetProtected(int nProtected) { m_protected = nProtected; //在派生類C中可以使用基類A中的protected類型 } void SetPrivate(int nPrivate) { m_private = nPrivate; //錯誤,因為基類的private成員不能用 } }; C c; //創建C類的對象c c.m_public = 100; //錯誤,protected繼承C類里變成了protected成員 c.m_protected = 100; //錯誤,protected繼承C類里還是protected成員 c.m_private = 100; //錯誤,在派生類中都不可以直接使用,在類外就更不能了 class D :private A { void SetPublic(int nPublic) { m_public = nPublic; //在派生類D中可以使用基類A中的public類型 } void SetProtected(int nProtected) { m_protected = nProtected; //在派生類D中可以使用基類A中的protected類型 } void SetPrivate(int nPrivate) { m_private = nPrivate; //錯誤,因為基類的private成員不能用 } }; D d; //創建D類的對象d d.m_public = 100; //錯誤,private繼承D類里變成了private成員 d.m_protected = 100; //錯誤,private繼承D類里變成了private成員 d.m_private = 100; //錯誤,在派生類中都不可以直接使用,在類外就更不能了