C++中的代码重用

包含对象成员的类

实现has-a关系的途径

初始化被包含的对象

对于继承的对象,构造函数在成员初始化列表中使用类名来调用特定的基类构造函数。对于成员对象和内置类型的成员则使用成员名
注意:初始化列表中的项目被初始化的顺序为它们被声明的顺序,而不是它们在初始化列表中的顺序。
包含中有显示的对象名称,可以通过对象名称来调用包含类的公有方法。

私有继承(private)

可以实现has-a关系途径——私有继承。使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员。这意味着基类方法将不会成为派生对象公有接口的一部分,所以不继承基类的接口,但是可以在派生类的成员函数使用它们。

使用私有继承,基类的公有方法将成为派生类的私有方法;使用私有继承,类将继承实现。

包含将对象作为一个命名的成员对象添加到类中,而私有继承将对象作为一个未命名的继承对象添加到类中。

在私有继承中的类定义中,省略了显示对象名称,并在内联构造函数中使用了类名,而不是成员名。

访问基类的方法

包含使用对象来调用方法;私有继承使用类名和作用域解析运算符来调用基类的方法。

访问基类对象

使用强制类型转换,将派生类对象转换为基类对象。为了避免调用构造函数创建新的对象,可以用强制类型转换来创建一个引用。

访问基类的友元函数

通过显示地转换为基类来调用正确的函数。在私有继承中,咋不进行显示类型转换的情况下,不能将指向派生类的引用或指针赋给基类引用或者指针。

保护继承

保护继承是私有继承的变体。使用关键字protected。在使用保护继承时,基类的公有成员和保护成员都变成派生类的保护成员。

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

隐式向上转换意味着无需进行显示类型转换,就可以将基类指针或引用指向派生类对象。
注意:这里通过基类接口访问表示需要将派生类转换为基类才能访问成员。

多重继承

编译器默认不带关键字的是私有派生。

虚基类

虚基类使得从多个类(它们的基类相同)派生出的对象只继承一个基类对象。
用关键字virtual可以使得基类变为虚基类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值