C++保护继承

保护继承是私有继承的变体:
使用保护继承时,基类的公有成员和保护成员都将成为派生类的保护成员。和私有继承一样,基类的接口在派生类中也是可用的,但是在继承结构之外是不可用的。
当从派生类派生出另一个类时,私有继承和保护继承之间的主要区别就呈现出来了。使用私有继承,第三代类不能使用基类的接口,这是因为基类的公有方法在派生类中变成了私有方法;使用保护继承,基类的公有方法在第二代中将变成受保护的,因此第三代类可以使用他们。

class Student :protected string, protected std::valarray<double>
{
	...
};

各种继承方式:

特征公有继承保护继承私有继承
公有成员变成派生类的公有成员派生类的保护成员派生类的私有成员
保护成员变成派生类的保护成员派生类的保护成员派生类的私有成员
私有成员变成只能通过基类的接口访问只能通过基类的接口访问只能通过基类的接口访问
能否隐式向上转换是(但只能在派生类中)

私有继承和保护继承也使得派生类能够重用基类的代码,但建立的是has-a关系。这两种继承,基类的接口成为派生类的内部接口,派生类对象不能显式地使用基类的接口,不能把派生类对象看作一种基类对象。由于这个原因,在不进行显式类型转换的情况下,基类的指针或引用将不能指向派生类对象。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的继承有三种访问控制权限:公共继承、私有继承保护继承。 1. 公共继承(public inheritance): 公共继承是最常用的一种继承方式。在公共继承中,基类的公共成员和保护成员都可以被派生类访问,而基类的私有成员不能被派生类访问。 例如: ``` class Base { public: int public_var; protected: int protected_var; private: int private_var; }; class Derived : public Base { public: void func() { public_var = 1; // 可以访问基类的公共成员 protected_var = 2; // 可以访问基类的保护成员 //private_var = 3; // 不能访问基类的私有成员 } }; ``` 2. 私有继承(private inheritance): 私有继承是一种不常用的继承方式。在私有继承中,基类的公共成员和保护成员都变成了派生类的私有成员,不能被外部访问。 例如: ``` class Base { public: int public_var; protected: int protected_var; private: int private_var; }; class Derived : private Base { public: void func() { public_var = 1; // 不能访问基类的公共成员 protected_var = 2; // 不能访问基类的保护成员 //private_var = 3; // 不能访问基类的私有成员 } }; ``` 3. 保护继承(protected inheritance): 保护继承是介于公共继承和私有继承之间的一种继承方式。在保护继承中,基类的公共成员和保护成员都变成了派生类的保护成员,不能被外部访问。 例如: ``` class Base { public: int public_var; protected: int protected_var; private: int private_var; }; class Derived : protected Base { public: void func() { public_var = 1; // 不能访问基类的公共成员 protected_var = 2; // 可以访问基类的保护成员 //private_var = 3; // 不能访问基类的私有成员 } }; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值