C++Primer再学习(4)

53.在c++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。用引用(或指针)调用的虚函数在运行时确定,被调用的函数时引用(或指针)所指对象的实际类型所定义。(延伸阅读《深度探索c++对象模型》)
54.接口继承:public派生类继承基类的接口(public成员),因此具有与积累相同的接口。 实现继承:使用private或protected派生的泪不继承基类的接口,也就是说此种继承方式对外提供的访问接口不包含基类的接口部分。
55.派生类可以恢复继承成员的访问级别,但不能使访问级别比基类中原来指定的更宽松或更严格。 用法:在派生类中的与基类访问级别相同的标号下使用 using Base:: 。此时 派生类对象不能转换为基类引用或指针。
56.友元关系不能继承。基类的友元对派生类的成员没有特殊访问权限。如果基类被授予友元关系,则只用基类具有特殊访问权限,该基类的派生类不能访问授予友元关系的类
57.要确定派生类到基类的转换是否可访问,可以考虑基类的public成员在派生类中是否提供对外访问,如果可以,则转换时可访问的。
58.派生类如果不定义自己的默认构造函数和复制控制成员,就将使用编译器的合成版本而不是基类的版本。
59.如果定义了复制构造函数和赋值操作符,则派生类的复制构造函数一般应显式使用基类复制构造函数初始化对象的基类部分。而赋值操作符也应显式调用基类赋值操作符
60.即使析构函数没有工作要做,继承层次的根类也应该定义一个虚析构函数。(链接:《EffectiveC++》第07款)
61.需要在不知道对象的确切类型时分配已知对象的新副本,通用方法是定义虚操作进行复制,一般命名为clone
62.句柄类将继承层次(实现)隐藏起来,只提供用户级代码间接访问继承层次中的根类。
63.如果拿不准是否需要以typename指明一个名字是一个类型,那么指定它是一个好主意。在类型之前指定typename没有害处,因此,即使typename是不必要的,也没有关系。
64.编写模板代码时,对实参类型的要求尽可能少是很有益的
65.编写泛型代码的两个重要原则:1)模板的形参是const引用 2)函数体中的测试只用<比较
66.编译器用模板产生指定的类或函数的特定类型版本,产生模板的特定类型实例的过程称为实例化
67.从函数实参确定模板实参的类型和值的过程叫做模板实参推断
68.在推断期会发生:形参实参匹配,类型形参的实参类型转换
69.通常,当使用类模板的名字的时候,必须指定模板形参。例外:在类本身的作用域内部,可以使用类模板的非限定名。
70.特化模板声明定义之前必须先声明定义其原模板
71.在设计时,如果发现既包含函数模板又包含非模板函数的重载函数集合,此时应当定义模板特化替换非模板函数的重载函数集合
原文地址:https://www.cnblogs.com/neking/p/2840570.html