C++学习笔记(五)

来源:互联网 发布:怎么用js刷新画面 编辑:程序博客网 时间:2024/06/06 08:48

41. 复制对象

勿忘其每一个成分,自己编写copying函数,要确保:复制所有local成员变量;调用所有base classes内的适当copying函数。不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个copying函数共同调用。


42.返回reference

必须返回对象时,别妄想返回其reference。任何时候看到一个reference声明式,都应该立刻问自己,它的另一个名称是什么,因为它一定是某物的另一个名称。
绝不要返回point或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个local static对象而有可能同时需要多个这样的对象。

43. private继承

private继承主要用于“当一个意欲成为derived class者想访问一个意欲成为base class者的protected成分,或为了重新定义一或多个virtual函数EBO empty base optimization 空白基类最优化,只适用于单一继承。和复合不同,private继承可以造成empty base最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要。

44. 明智而审慎的使用多重继承

C++编译器解析重载函数调用的规则:在看到是否有个函数可取用之前,C++首先确认这个函数对此调用的最佳匹配。找出最佳匹配函数后才检验其可取用性。
virtual base的初始化责任是由继承体系中的最低层class 负责。这暗示:classes若派生自virtual bases而需要初始化,必须认知其virtual bases——不论那些bases距离多远;当一个新的derived class加入继承体系中,它必须承担起virtual bases(不论直接还是间接)的初始化责任

45. virtual base classes: 

非必须;如果必须使用,尽可能避免在其中放置数据。virtual继承会增加大小,速度,初始化(及赋值)复杂度等等成本。如果virtual base classes不带任何数据,将是最具实用价值的情况。多重继承的确有正当用途。其中一个情节涉及"public继承某个Interface class"和"private 继承某个协助实现的class"的两相组合。

46. IO类

IO类(istream,ostream)属于不能被拷贝的类,因此只能通过引用来传递他们。

47. 构造函数

构造函数不能声明称const的,当创建类的一个const对象时,知道构造函数完成初始化过程,对象才能真正获得其常量属性。因此,构造函数在const对象的构造过程中可以向其写值。
只有当类没有声明任何构造函数时,编译器才会自动地生成默认的构造函数。因此,对于一个普通的类来说,必须定义它自己的默认构造函数,而不应该交给编译器。
C++11 提出在狗仔函数的参数列表后写上 =default 以表明要求编译器生成默认构造函数。这条语句既可以和声明出现在一起出现在类的内部,也可以出现在类的外部。

0 0