1、虚函数在基类中定义,在派生类中能够重载。
2、当使用基类的一个引用调用一个虚函数时将发生动态绑定。(根据派生类参数的不同函数版本)
3、基类中一般都会定义析构函数。
4、基类的函数分为两类:(1)在派生类中能够重载的函数(2)派生类直接继承不需要修改的函数
5、任何除构造函数之外的非静态函数都可以是虚函数,执行时进行动态绑定。
6、virtual只能出现在类内部的声明语句之前,不能用于类外部的函数。
7、一个函数在基类中是虚函数则在派生类中也是虚函数。
8、派生类能够访问基类的公有成员,但是不能访问私有成员。派生类中需要将虚函数重新声明。
9、对于公有派生(public)基类的公有成员也是派生类接口的组成部分,可以将公有派生类型的对象绑定到基类的引用或指针上。
10、派生类没有覆盖基类中的某个虚函数,则跟基类的普通成员行为类似,直接继承基类中的版本。
11、派生类可以在覆盖的函数前加virtual也可以在函数后面添加override。
12、我们可以将派生类的对象当成基类对象来使用,可以将基类的指针或引用绑定到派生类对象中的基类部分。
13、派生类的构造函数,先初始化基类的部分。然后按照顺序依次初始化派生类的成员。
14、派生类可以访问基类的公有成员和受保护成员。
15、基类中如果定义了静态成员,则每个静态成员都只有唯一的实例。
16、如果想将哪个类作为基类,则该类必须已经定义并非声明。
17、一个类不能派生它本身。
18、通过在声明类时后面添加final可以防止继承的发生。
19、如果表达式不是引用也不是指针,则它的动态类型始终和静态类型一致。
20、可以将基类的指针或引用绑定到一个派生类对象。不存在从基类向派生类的隐式转换。派生类向基类的自动类型转换只对引用或指针类型有效。
21、因为动态绑定,所以我们必须为每个版本的虚函数都提供定义。(动态绑定只有当我们通过指针或引用调用虚函数时才会发生)
22、如果使用默认实参,则基类和派生类中定义的默认实参最好一致。
23、包含纯虚成员函数(没有函数体的函数,必须定义在类的外部)的类称为抽象基类。
24、不能创建抽象基类的对象,大多数是被继承的。
25、protected说明符:
- 受保护的成员类的用户无法访问。
- 受保护的成员对于派生类的成员和友元可以访问。
- 派生类对象只能通过派生类对象访问基类的受保护成员。
26、派生类的成员和友元只能访问派生类对象中的基类部分的受保护成员,对于普通的基类对象中的成员不具有特殊的访问权限。
27、private不影响派生类的访问权限,但是影响派生类对象的访问权限。
28、派生类向基类转换的可访问性:
- 只有当D公有地继承B时,用户代码才能使用派生类向基类的转换;如果D继承B的方式是受保护的或者私有的,用户代码不能使用该转换。
- 不论D以什么方式继承B、D的成员函数和友元都能使用派生类向基类的转换。
- 如果D继承B的方式是公有地或者受保护的,则D的派生类的成员和友元可以使用D向B的类型转换;反之,如果D继承B的方式是私有的,则不能。
29、可以通过using声明改变派生类继承的某个名字的访问级别,默认情况下class关键字的派生类是私有继承的;而使用struct关键字定义的派生类是公有的。
30、基类需要虚析构函数将阻止合成移动操作。
31、一个类也只能继承其直接基类的构造函数,类不能继承默认、拷贝和移动构造函数。
32、