博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer Plus(十四)——C++中的代码重用
阅读量:5867 次
发布时间:2019-06-19

本文共 1972 字,大约阅读时间需要 6 分钟。

  hot3.png

1. 使用公有继承时,类可以继承接口,可能还有实现(基类的纯虚函数提供接口,但不提供实现)。获得接口是is-a关系的组成部分。而使用组合,类可以获得实现,但不能获得接口,不继承接口是has-a关系的组成部分。

2. C++包含让程序员能够限制程序结构的特性——使用explicit防止单参数构造函数的隐式转换,使用const限制方法修改数据等等。这样做的根本原因是在编译阶段出现错误优于在运行阶段出现错误。

3. 当初始化列表包含多个项目时,这些项目被初始化的顺序为它们被声明的顺序,而不是它们在初始化列表中的顺序。

4. 使用私有继承,基类的公有成员和保护成员都将成为私有成员。私有继承提供的特性和包含相同:获得实现而不获得接口,所以,私有继承也可以用来实现has-a关系。

5. 包含 提供了被显式命名的对象成员,而私有继承提供了无名称的子对象成员。使用包含时将使用对象名来调用方法,而使用私有继承时将使用类名和作用域解析符来调用方法。这个方法并不适用于友元函数,然而可以通过显式的转化为基类来调用正确的函数。

6. 私有继承中,未进行显式类型转换的派生类引用或指针,无法赋值给基类的引用或指针。

7. 通常,应使用包含来建立has-a关系;如果新类需要访问原有类的保护成员,或需要重新定义虚函数,则应使用私有继承。

8. 使用一个using声明来指出派生类可以使用特定的基类成员,即使使用的是私有派生。

9. 与单继承一样,多继承表示的也是is-a关系,必须使用关键字public来限定每一个基类,否则编译器将认为是私有派生。

10. C++在基类是虚的时,禁止信息通过中间类自动传递给基类,即如果类有间接虚基类,则除非只需使用该虚基类的默认构造函数,否则必须显式调用该虚基类的某个构造函数,对于虚基类这是合法的,对于非虚基类,这是非法的。

11. 多重继承可能导致函数调用的二义性,一种方法是使用模块化方式,而不是递增方式,即提供一个祖先组件的方法和一个只显示父类组件的方法,然后在该类中组合起来。

12. 虚二义性规则与访问规则无关。

13. 不能将模板成员函数放在独立的实现文件中,在C++11之前,C++标准的确提供了关键字export,让您能够将模板成员函数放在独立实现的文件中,但支持该关键字的编译器不多,C++11不再这样使用关键字export,而将其保留用于其他用途。

14. 类模板必须显式提供所需类型,这与常规函数模板是不同的,因为编译器可以根据函数的参数类型来确定要生成哪种函数。

15. 指定特殊的类型而不是用作泛型名被称为非类型或表达式参数,这个参数可以是整型、枚举、引用或指针,模板代码不能修改参数的值,也不能使用参数的地址,实例化模板时,用作表达式参数的值必须是常量表达式。

16. 模板类可用作基类、组件类,还可以用作其他模板的类型参数。

17. C++98要求使用至少一个空白字符将两个>符号分开,以免与运算符>>混淆,C++11不要求那么做。

18. 可以为类模板类型参数提供默认值,但不能为函数模板参数提供默认值。然而可以为非类型参数提供默认值,这对于类模板和函数模板都是适用的。

19. 使用关键字template声明类的特定具体化时,将发生模板的显式实例化,这种情况下,编译器将使用通用模板生成实例,虽然尚未请求这个类的对象。

20. 模板的显式具体化是对于特定类型的定义。有时候,可能需要在为特殊类型实例化时,对模板进行修改,是其行为不同,在这种情况下,可以创建显式具体化。当具体化模板和通用模板都与实例化请求匹配时,编译器将使用具体化程度最高的版本。

21. C++还允许部分具体化,即部分限制模板的通用性,例如部分具体化可以给类型参数之一制定具体的类型。 

22. 模板类也可以有友元,分为三类:非模板友元,它是模板所有实例化的友元;约束模板友元,即友元的类型取决于类被实例化时的类型,分为3步:首先,在类的定义前声明某个模板函数,然后再将模板声明为友元,这些语句根据类模板参数的类型声明具体化,最后为友元提供模板定义;非约束模板友元函数,即每个函数具体化都是每个类具体化的友元,友元函数模板类型参数与模板类类型参数不同。

23. C++11中的别名用法:使用using xx = xxx 来声明类型的别名

// 模板别名template
using arrType = std::array
;arrType
intArr;// 非模板别名using pc2 = const char *;

 

转载于:https://my.oschina.net/shou1156226/blog/857026

你可能感兴趣的文章
Naresh Jain:合作的阴暗面
查看>>
Lightbend就收购OpsClarity一事与InfoQ的对话
查看>>
VS 2019要来了,是时候了解一下C# 8.0新功能
查看>>
关于5G被激烈讨论的那些争端和冲突
查看>>
RPC框架的可靠性设计
查看>>
解密新一代Java JIT编译器Graal
查看>>
专访尤雨溪:先别管4.0了,Vue CLI重构了解一下
查看>>
苹果公司透露Siri新发音引擎的内部原理
查看>>
Kotlin和Swift在Redmonk语言排行榜上的排名大幅提升
查看>>
宝马将机器架上微软 Azure,国内科技巨头也难抵汽车“诱惑”
查看>>
Spark Streaming 作者,Alluxio 的创始人李浩源:AI 潮流对做数据存储业务公司的挑战...
查看>>
立下“去O”Flag的AWS,悄悄修炼了哪些内功?
查看>>
ASP.NET Core 3.0项目开始“瘦身”
查看>>
高效使用微软Azure服务总线的消息功能
查看>>
试水区块链出版?纽约时报在招人了
查看>>
Google 和 Facebook 披露全球范围宕机原因
查看>>
中台之上(六):如何为一个商业银行设计业务架构?
查看>>
Facebook开源图像处理库Spectrum,优化移动端图像生成
查看>>
前端工程师必读的10篇精选技术文章
查看>>
C#特性: 只读本地变量
查看>>