C++:继承-继承权限

在C++中,类的权限分为公有、私有和保护三种。这些权限控制了类的成员(数据成员和成员函数)对外部代码的可见性和访问性。

  1. 公有(public)权限

    在公有权限下声明的成员可以被类的外部代码直接访问;公有成员在类的派生类中仍然可以被访问。
  2. 私有(private)权限

    在私有权限下声明的成员对于外部代码是不可见的;只有类的成员函数可以访问私有成员;私有成员不能被派生类访问,即使是公有继承也是如此。
  3. 保护(protected)权限

    在保护权限下声明的成员对于外部代码是不可见的;类的派生类可以访问保护成员;保护成员在派生类中仍然是保护的,对于外部代码是不可见的。

在 C++类的继承中,也对应着三种继承权限,分别是公有继承(public inheritance)、保护继承(protected inheritance)和私有继承(private inheritance)。这些权限决定了派生类如何继承基类的成员以及外部访问的方式。

  1. 公有继承(public inheritance)

    在公有继承中,基类的公有成员在派生类中仍然是公有的,基类的保护成员在派生类中仍然是保护的,基类的私有成员不会被派生类继承。

    派生类对象可以直接访问基类的公有成员,但不能访问基类的私有成员。

    外部代码可以访问派生类对象中的公有成员,但不能访问保护成员或私有成员。

    //基类
    class Animal
    {
    public:
        Animal();
        ~Animal();
    ​
        int m_nAge;
    ​
    private:
        int testA;
    protected:
        int testB;
    };
    ​
    //派生类(公有继承)
    class Cat : public Animal
    {
    public:
        Cat();
        ~Cat();
        
    }

    上述代码中的派生类就属于通过对基类进行公有继承得到,此时Animal类中的公有成员被继承至Cat类中也是公有成员,Animal类的保护成员在Cat类中仍然是保护的,但是Animal类的私有成员不会被Cat类继承。如此时我在Cat类中对基类中的私有成员TestA和保护成员TestB进行设置/访问,那么此时可以发现私有成员TestA无法访问,保护成员TestB可以正常访问;是因为私有成员并没有被继承。

    总结:

    公有继承:
            基类                  派生类
          公有成员     --->       公有成员
          保护成员     --->       保护成员
          私有成员                无法继承
    
  2. 保护继承(protected inheritance)

    在保护继承中,基类的公有和保护成员在派生类中都变成了保护成员,类的私有成员依然不会被派生类继承。

    派生类对象可以访问基类的公有和保护成员,但外部代码无法直接访问派生类对象的成员。

    外部代码无法访问派生类对象中的任何成员。

    保护继承:

    //基类
    class Animal
    {
    public:
        Animal();
        ~Animal();
    ​
        int m_nAge;
    ​
    private:
        int testA;
    ​
    protected:
        int testB;
    };
    ​
    //派生类(保护继承)
    class Cat : protected Animal
    {
    public:
        Cat();
        ~Cat();
    }

    派生类 Cat:使用保护继承方式继承自 Animal 类,意味着基类 Animal 的公有和保护成员在 Cat 类中都变成了保护的。外部无法直接访问 Cat 对象的成员。Cat 类中可以访问继承自 Animal 的公有和保护成员。

总结:

保护继承
        基类                  派生类
      公有成员     ---->      保护成员
      保护成员     ---->      保护成员
      私有成员                无法继承

3.私有继承(private inheritance)

在私有继承中,基类的公有和保护成员在派生类中都变成了私有的,类的私有成员依然不会被派生类继承。

派生类对象可以访问基类的公有和保护成员,但外部代码无法直接访问派生类对象的成员。

外部代码无法访问派生类对象中的任何成员。

私有继承:

//基类
class Animal
{
public:
    Animal();
    ~Animal();
​
    int m_nAge;
    
private:
    int testA;
​
protected:
    int testB;
};
​
//派生类
class Cat : private Animal
{
public:
    Cat();
    ~Cat();
}

派生类 Cat:采用私有继承方式继承自 Animal 类,这意味着基类 Animal 的公有和保护成员在 Cat 类中都变成了私有的。Cat 类中可以访问继承自 Animal 的公有和保护成员,但外部代码无法访问。

总结:

      私有继承

        基类                  派生类
       公有成员     --->      私有成员
       保护成员     --->      私有成员
       私有成员               无法继承

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值