C++学习笔记:继承

C++学习笔记:继承

Inheritance and Composition

为什么使用 Inheritance和composition? 可以更好的重用已有的代码。可以在不修改已有代码的条件下重用已有的代码。

如何选择:Inheritance或composition?

  • Inheritance: 关系是"is a";需要upcasting;
  • Composition: 关系是"has a";需要的是subobject的功能,不需要保留其接口;

Initialization Sequence

使用 constructor initializer list 对基类或成员对象进行初始化。初始化的顺序:
1) 先基类,后派生类;
2) 先成员对象,后类的构造函数;
3) 类成员的初始化顺序按照对象声明的顺序;

Name hiding

在 继承关系中有两种重新定义函数情况:
1) overriding
结合虚函数机制实现动态联编。这种情况下,不允许修改函数的参数 和返回值类型。
2) overload/redefing    
如果在派生类中定义了重新定义了基类中的函数,那么基类中的 同名函数将在派生类中隐藏。
为什么这样设计?因为继承机制描述的是“is a”关系,派生类和基类应该有相同的行为。如果在派生类中重新定义了函数,也就表明希望有不同的行为,所以要隐藏基类中的同名函数。

不能自动继承的函数

  • constructor/deconstructor
  • operator=

继承关系中的Copy constructor

参见Copy constuctor

继承关系中的 Private

Private适用的场合:
1) 部分使用基类中的接口。将需要适用的接口使用using 声明。如果不需要适用基类的接口,应该考虑使用Composition。
2) 可以消除继承关系中的二义性;

继承关系中的二义性

通 过::消除,例如:D d; d.B::a;

Upcasting

  • 是 从派生类到基类的转换。
  • 适用于pointer和Reference。
  • 不需要显式的使用类型转换。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值