子类继承基类的三种继承方式

Posted !!-阳光-!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子类继承基类的三种继承方式相关的知识,希望对你有一定的参考价值。

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

  

以上是关于子类继承基类的三种继承方式的主要内容,如果未能解决你的问题,请参考以下文章

C++继承:公有,私有,保护

c++继承是如何工作的?

三种继承方式和三种访问权限

C++多继承

请教C++高手: 关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成

python调用父类方法的三种方式(super调用和父类名调用)