1.不论从基类派生出来多少个派生类,对于每个静态成员来说都只存在唯一实例,静态成员遵循通用的访问控制规则。
2.final可以防止继承的发生。
3.dynamic_cast可以将基类型转换为派生类型,将在运行时进行安全检查。如确定安全,也可以用static_cast
4.覆盖继承虚函数,需保证形参类型完全一致;返回类也要匹配,例外是返回的是类本身的指针或引用,只不过要求B到D的类型转换是可访问的。
5.override标记覆盖虚函数,编译器将检查,只有虚函数才能被overide覆盖;final指定某个函数不能被覆盖
6.某次函数的默认实参由本次调用的静态类型决定。
7.一个类有三种用户:类的实现者、派生类成员、普通用户。普通用户只能访问公有成员,派生类能访问公有和保护成员。
派生访问说明符对于派生类的成员能否访问基类成员没有影响,目的是控制派生类的用户(派生类的普通用户、派生类的派生类)对基类成员的访问权限。如公有继承使基类的公有和保护成员成为派生类的公有成员。
对于代码中某个给定节点来说,如果基类的公有成员是可访问的,则派生类向基类的类型转换也是可访问的。
对基类的访问权限由基类本身控制,即使派生类的基类部分也是如此,所以基类的友元可以访问基类内嵌在派生类中的部分。
using 声明可改变成员的可访问性,访问权限由改using之前的访问说明符来决定。
8.派生类的作用域嵌套在基类作用域内;声明在内层作用域的函数并不会重载声明在外层作用域的函数,如果出现同名,则基类成员被隐藏。
9.默认情况下,基类默认构造函数初始化派生类对象的基类部分。如要用拷贝(或移动),必须在派生类构造函数初始值列表中显示使用。
10.using声明可用来继承构造函数。通常情况下,using只是令某个名字在当前作用域可见。这里,将使编译器产生代码。构造函数的using声明不会改变访问级别,不能指定explicit或constexpr。