21.必须在声明引用时进行初始化。
22.对于参数列表的函数,必须从右向左添加默认值。也就是说,要为某个参数设置默认值,则必须为它右边的所有参数提供默认值;实参按从左到右的顺序依次被赋给相应的形参,而不能跳过任何参数;只有原型指定了默认值,函数定义与没有默认参数时完全相同。
23.将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编。在编译过程中进行联编被称为静态联编(static binding),又称为早期联编(early binding);编译器必须生成能够在程序运行时选择正确的虚方法的代码,这被称为动态联编(dynamic binding)又称为晚期联编。
24.编译器对非虚方法使用静态联编,对虚方法使用动态联编。
25.友元不能是虚函数,因为友元不是类成员,而只有成员才能是虚函数。如果由于这个原因引起了设计问题,可以通过让友元函数使用虚拟成员函数来解决。
26.在派生类中重新定义函数,将不是使用相同的函数特征标覆盖基类声明,而是隐藏同名的基类方法,不管参数特征标如何。
27.如果重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型是基类引用或指针,则可以修改为指向派生类的引用或指针。这种特性被称为返回类型协变(covariance of return type)。
28.如果基类声明被重载了,则应在派生类中重新定义所有的基类版本。如果只重新定义一个版本,则另外两个版本将被隐藏,派生类对象将无法使用它们。
29.当类声明中包含纯虚函数时,则不能创建该类的对象。这里的理念是,包含纯虚函数的类只用作基类。原型中=0使虚函数成为纯虚函数。
30.C++有三种管理数据内存的方式:自动存储、静态存储和动态存储(有时也叫作*存储空间或堆)。
。自动存储:
在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic ariable),这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡。
。静态存储:
是整个程序执行期间都存在的存储方式。使变量成为静态方式有两种:一种是在函数外面定义它;另一种是在声明变量时使用关键字static。
。动态存储:
内存池同用于静态变量和自动变量的内存是分开的。生命周期就不完全受到程序或函数的生存时间的控制了。