c++ 继承方式

继承的语法:class 子类 : 继承方式 父类

继承方式一共有三种:

  • 公共继承
  • 保护继承
  • 私有继承

 

 

 如果是公共继承,父类中的私有方法不能访问。

如果是保护继承,类A中的a,b属性在子类B中变成了保护级别,私有还是不能访问

如果死是私有继承,a,b变成了私有级别,原先为私有级别的c同样不能访问。

示例:

class Base1
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};

//公共继承
class Son1 :public Base1
{
public:
    void func()
    {
        m_A; //可访问 public权限
        m_B; //可访问 protected权限
        //m_C; //不可访问
    }
};

void myClass()
{
    Son1 s1;
    s1.m_A; //其他类只能访问到公共权限
    //s1.m_B;//m_B是保护权限,只能在本类及其继承子类中使用,在类外无法调用
}

//保护继承
class Base2
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};

//父类中的保护公共权限,到了子类中变成保护权限
class Son2 :protected Base2
{
public:
    void func()
    {
        m_A; //可访问 protected权限
        m_B; //可访问 protected权限
        //m_C; //不可访问  
    }
};
void myClass2()
{
    Son2 s;
    //s.m_A; //不可访问 m_A是保护权限,只能在本类及其继承子类中使用,在类外无法调用
}

//私有继承
class Base3
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};
class Son3 :private Base3
{
public:
    void func()
    {
        m_A; //可访问 private权限
        m_B; //可访问 private权限
        //m_C; //不可访问
    }
};
class GrandSon3 :public Son3
{
public:
    void func()
    {
        //Son3是私有继承,所以继承Son3的属性在GrandSon3中都无法访问到
        //m_A;
        //m_B;
        //m_C;
    }
};

 父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到

posted @ 2022-04-10 16:10  安静点--  阅读(86)  评论(0)    收藏  举报