C++ Primer Plus(十四)——C++中的代码重用

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<typename T>
using arrType = std::array<T, 12>;
arrType<int> intArr;

// 非模板别名
using pc2 = const char *;

 

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值