c++primer plus 6 读书笔记 第十四章 C++中的代码重用

简介: c++primer plus 6 读书笔记 第十四章 C++中的代码重用

C++中的代码重用

14.1 包含对象成员的类

14.1.1 valarray类简介

14.1.2 Student类的设计

14.1.3 Student类示例

14.2 私有继承

14.2.1 Student类示例(新版本)

14.2.2 使用包含还是私有继承

14.2.3 保护继承

14.2.4 使用using重新定义访问权限

14.3 多重继承3

14.3.1 有多少Worker

14.3.2 哪个方法

14.3.3 MI小结

14.4 类模板

14.4.1 定义类模板

14.4.2 使用模板类

14.4.3 深入探讨模板类

14.4.4 数组模板示例和非类型参数

14.4.5 模板多功能性

14.4.6 模板的具体化

14.4.7 成员模板

14.4.8 将模板用作参数

14.4.9 模板类和友元

14.4.10 模板别名(c++11)

14.5 总结

C++提供了几种重用代码的手段。第13章介绍的公有继承能够建立is-a关系,这样派生类可以重用基类的代码。私有继承和保护继承也使得能够重用基类的代码,但建立的是has-a关系。使用私有继承时,基类的公有成员和保护成员将成为派生类的私有成员;使用保护继承时,基类的公有成员和保护成员将成为派生类的保护成员。


无论使用哪种继承,基类的公有接口都会成为派生类的内部接口。这有时候被成为继承实现,但不继承接口,因为派生类对象不能显式地使用基类的接口。因此,不能将派生对象看作是一种基类对象。由于这个原因,在不进行显式类型转换时,基类指针或引用不能指向派生类对象。


还可以通过开发包含对象成员的类来重用代码。这种方法被成为包含、层次化或组合,它建立的也是has-a关系。与私有继承和保护继承相比,包含更容易实现和使用。所以优先使用这种方式。然而,私有继承和保护继承比包含有一些不同的功能。例如,继承允许派生类访问基类的保护成员;还允许派生类重新定义从基类继承来的虚函数。因为包含不是继承,所以通过包含来重用类代码时,不能使用这些功能。

另一方面,如果需要使用某个类的几个对象,则用包含更适合。例如:


State类包含多个Country对象。

 多重继承(MI)使得能够在类设计中重用多个类的代码。私有MI或保护MI建立has-a 关系,而公有MI建立has-a关系。MI会带来一些问题,即多次定义同一个名称,继承多个基类对象。可以使用类限定符来解决名称二义性问题,使用虚基类来避免继承多个基类对象的问题。但使用虚基类后,就需要为编写的构造函数初始化列表以解决


二义性问题。


相关文章
|
3月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
229 0
|
5天前
|
算法 安全 C++
提高C/C++代码的可读性
提高C/C++代码的可读性
19 4
|
1月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
195 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2月前
|
C++
继续更新完善:C++ 结构体代码转MASM32代码
继续更新完善:C++ 结构体代码转MASM32代码
|
2月前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
|
2月前
|
C++
2合1,整合C++类(Class)代码转换为MASM32代码的平台
2合1,整合C++类(Class)代码转换为MASM32代码的平台
|
2月前
|
前端开发 C++ Windows
C++生成QML代码与QML里面集成QWidget
这篇文章介绍了如何在C++中生成QML代码,以及如何在QML中集成QWidget,包括使用Qt Widgets嵌入到QML界面中的技术示例。
|
3月前
|
C++
拥抱C++面向对象编程,解锁软件开发新境界!从混乱到有序,你的代码也能成为高效能战士!
【8月更文挑战第22天】C++凭借其强大的面向对象编程(OOP)能力,在构建复杂软件系统时不可或缺。OOP通过封装数据和操作这些数据的方法于对象中,提升了代码的模块化、重用性和可扩展性。非OOP方式(过程化编程)下,数据与处理逻辑分离,导致维护困难。而OOP将学生信息及其操作整合到`Student`类中,增强代码的可读性和可维护性。通过示例对比,可以看出OOP使C++代码结构更清晰,特别是在大型项目中,能有效提高开发效率和软件质量。
33 1
|
3月前
|
C++
C++代码来计算一个点围绕另一个点旋转45度后的坐标
C++代码来计算一个点围绕另一个点旋转45度后的坐标
76 0
|
3月前
|
C++
Resharper c++ 使用Enter自动补全代码
Resharper c++ 使用Enter自动补全代码
39 0