C++ Primer Plus:第十三章 - 类继承

0、本章内容:

is-a关系的继承。

如何以公有方式从一个类派生出另一个类。

保护访问。

构造函数成员初始化列表。

向上和向下强制转换。

虚成员函数。

早期(静态)联编与晚期(动态)联编。

抽象基类。

纯虚函数。

何时及如何使用公有继承。

1、一个简单的基类:

1.1 派生一个类

存储了基类的数据成员。
可以使用基类方法。

需要自己的构造函数。
可以根据需要添加额外的数据成员和成员函数。

1.2 构造函数:访问权限的考虑

派生类构造函数必须使用基类构造函数。
用成员初始化列表,没有则用默认构造函数。

1.3 使用派生类

1.4 派生类和基类之间的特殊关系

派生类可以使用基类方法。
基类指针可以指向派生类对象,基类引用可以引用派生类对象。

派生类可以初始化基类,可以赋值给基类。
使用隐式复制构造函数、隐式重载赋值运算符函数。

2、继承:is-a关系:

不能删除基类属性。

3、多态公有继承:

3.1 开发Brass类和BrassPlus类

基类和派生类,都带virtual使用对象的类型,都不带virtual使用指针或引用的类型。
基类使用virtual,派生类默认带virtual,使用对象的类型。
基类不使用virtual,派生类使用virtual,使用指针或引用的类型。

为基类声明一个虚析构函数也是一个惯例。

只有构造函数才能使用成员初始化列表。

4、静态联编和动态联编:

4.1 指针和引用类型的兼容性

使用基类引用或指针作为参数的函数调用,将进行向上转换。

4.2 虚成员函数和动态联编

编译器对非虚方法使用静态联编,对虚方法使用动态联编。
如果需要在派生类中重新定义基类的方法,则将它设置为虚方法,否则设置为非虚方法。

4.3 有关虚函数的注意事项

构造函数不能是虚函数,创建派生类对象应该调用派生类的构造函数。
析构函数应当是虚函数,即使这个类不用作基类。
友元函数不能是虚函数,因为只有成员函数才能使虚函数。

重新定义继承的方法不是重载,而是隐藏。
如果返回的是基类引用或指针,则可以修改为指向派生类的引用或指针(返回类型协变)。

5、访问控制:protected:

派生类可以访问基类的protected成员。

6、抽象基类:

纯虚函数 = 抽象函数 + 虚函数。
包含纯虚函数的类只能用作基类。

6.1 应用ABC概念

6.2 ABC理念

7、继承和动态内存分配:

7.1 第一种情况:派生类不使用new

不需要定义显式析构函数、复制构造函数和赋值运算符。

7.2 第二种情况:派生类使用new

需要定义显式析构函数、复制构造函数和赋值运算符。
对于基类元素,显式析构函数自动完成,复制构造函数用成员初始化列表,赋值运算符显式调用基类赋值运算符。

7.3 使用动态内存分配和友元的继承分配示例

派生类使用<<需要强制类型转换来使用基类的<<。

8、类设计回顾:

8.1 编译器生成的成员函数
默认构造函数、复制构造函数、赋值运算符。

8.2 其他的类方法
构造函数、析构函数、转换、按值传递对象与传递引用、返回对象和返回引用使用const。

8.3 共有继承的考虑因素
什么不能被继承?构造函数、析构函数、赋值运算符、友元函数、静态函数。

8.4 类函数小结

9、总结:

null。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值