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会带来一些问题,即多次定义同一个名称,继承多个基类对象。可以使用类限定符来解决名称二义性问题,使用虚基类来避免继承多个基类对象的问题。但使用虚基类后,就需要为编写的构造函数初始化列表以解决


二义性问题。


相关文章
|
1月前
|
编译器 数据安全/隐私保护 C++
c++primer plus 6 读书笔记 第十三章 类继承
c++primer plus 6 读书笔记 第十三章 类继承
|
19天前
|
C语言 图形学 C++
|
8天前
|
编译器 程序员 C++
【C++高阶】掌握C++多态:探索代码的动态之美
【C++高阶】掌握C++多态:探索代码的动态之美
13 0
|
16天前
|
SQL 人工智能 算法
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
|
19天前
|
编译器 C语言 C++
|
1月前
|
C++ 编译器
【C++语言】Date类的代码实现(操作符重载运用)
【C++语言】Date类的代码实现(操作符重载运用)
|
1天前
|
设计模式 安全 编译器
【C++11】特殊类设计
【C++11】特殊类设计
22 10
|
6天前
|
C++
C++友元函数和友元类的使用
C++中的友元(friend)是一种机制,允许类或函数访问其他类的私有成员,以实现数据共享或特殊功能。友元分为两类:类友元和函数友元。类友元允许一个类访问另一个类的私有数据,而函数友元是非成员函数,可以直接访问类的私有成员。虽然提供了便利,但友元破坏了封装性,应谨慎使用。
39 9
|
2天前
|
存储 编译器 C语言
【C++基础 】类和对象(上)
【C++基础 】类和对象(上)
|
10天前
|
编译器 C++
【C++】string类的使用④(字符串操作String operations )
这篇博客探讨了C++ STL中`std::string`的几个关键操作,如`c_str()`和`data()`,它们分别返回指向字符串的const char*指针,前者保证以'\0'结尾,后者不保证。`get_allocator()`返回内存分配器,通常不直接使用。`copy()`函数用于将字符串部分复制到字符数组,不添加'\0'。`find()`和`rfind()`用于向前和向后搜索子串或字符。`npos`是string类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。