本部分罗列了本章的难点或注意点,以便复习巩固或者回忆,关注私聊我可以免费领取pdf版C++ Primer Plus 第6版。
-
派生构造函数:首先创建基类对象、派生类构造函数通过成员初始化列表将基类信息传递给基类构造函数、派生类构造函数应初始化派生类新增的数据成员
-
基类指针和基类引用可以在不进行显示转换的情况下指向/引用派生类对象,这是单向的
-
可以将派生类对象用于初始化基类对象,调用隐式复制构造函数
-
同样,也能将派生类对象赋值给基类对象
class A{ } class B:public a{ } B b; A a1(b); A a2; a2= b;
-
多态共有继承的两种方式:在派生类中重新定义基类方法;使用虚函数
-
virtual 如果方法是通过引用或指针而不是对象调用的将能确定使用基类还是派生类的方法。如果没有使用关键字virtual,程序将根据引用类型或指针类型选择方法。如果使用了virtual,程序将根据引用或指针的对象的类型来选择方法
-
方法在基类中被声明为虚的后,它在派生类中将自动成为虚方法
-
派生类不能直接访问基类的私有数据,必须使用基类的公有方法
-
对于派生类重新定义的方法,派生类中使用基类的此公有方法必须使用基类名和作用域解析符,而使用派生类没有重新定义的方法,不必使用
-
使用虚析构函数能保证正确的析构函数序列被调用
-
将源代码中的函数调用解释为特定的函数代码被称为函数名联编。在编译过程中进行联编叫做静态联编,在运行过程中进行联编叫做动态联编(一般通过指针和引用调用方法相关,例如:虚函数通过引用和指针调用)
-
按值传递只能将派生类对象的基类部分传给基类对象
-
如果在派生类中重新定义基类的方法,将其设为虚函数;否则,设置为非虚函数
-
虚函数的工作原理p504
-
构造函数不能是虚函数
-
析构函数作为基类一般指定为虚函数
-
友元不能是虚函数,因为不是类成员
-
重新定继承的方法不是重载,知识隐藏了基类版本
-
如果重新定义继承方法,应确保与原来的原型完全相同,但如果返回类型是基类引用或指针,则可以修改为指向派生类的引用或指针。这种特性叫做返回类型协变,因为允许返回类型随类类型变化而变化(不适用于参数)
-
如果基类声明被重载了,则应在派生类中重新定义所有的基类版本
-
protected 对于外界来说,保护成员的行为与私有成员相似,对于派生类来说,保护成员的行为与公有成员相似
-
纯虚函数声明的结尾处为=0
-
当类声明中包含纯虚函数时,则不能创建该类的对象
-
在原型中使用=0指出类是一个抽象基类,在类中可以不定义该函数,也允许定义该函数
-
可以创建对象的类叫做具体类
-
基类使用new,派生类不使用new,不需要定义派生类中的显示析构函数、复制构造函数和赋值运算符
-
派生类使用new,需要定义派生类中的显示析构函数、复制构造函数和赋值运算符
-
当基类和派生类都采用动态内存分配时,派生类的析构函数、复制构造函数、赋值运算符都必须使用相应的基类方法来处理基类元素。对于析构函数,这是自动完成的。对于构造函数,这是通过在初始化列表中通过调用基类的复制构造函数完成的,如果不这样做,将自动调用基类的默认构造函数。对于复制运算符,这是通过使用作用域解析运算符显示调用基类的赋值运算符来完成的。
-
派生类通过强制类型转换来使用基类友元函数,不能使用作用域解析运算符