子類繼承基類的三種繼承方式


在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;    //錯誤,在派生類中都不可以直接使用,在類外就更不能了

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM