1.函数重载是一种多态,运算符重载也是一种多态。运算符重载函数实质上也是函数,只不过函数名必须有关键字operator。
2.大多数运算符既可以重载为友元函数又可以重载为成员函数。一般将双目运算符重载为友元函数,将单目运算符重载为成员函数。
3.利用虚函数实现“一个接口,多种方式”,当用基类指针或引用对虚函数进行访问时,具体执行哪个函数只有在运行时才能知道。
4.与前面所讲的拷贝构造函数一样,为了避免内存泄露,凡是需要定义拷贝构造函数的类都需要对赋值运算符进行重载。
5.因为基类和派生类中的两个成员函数功能相同,所以采用相同的名字。两个成员函数同名,类型、参数完全相同,但是并不会产生二义性,而是同名覆盖,当通过派生类队形调用同名成员函数时,调用的是派生类中重写的成员函数。
6.基类的虚函数在派生类中仍然是虚函数,并且可以通过派生类抑制将这个虚函数继承下去,不需要加关键字virtual。只能通过指针或者引用来操作虚函数实现多态,如果通过对象名访问虚函数,则绑定仍然是编译时完成的,不能实现运行时多态。
7. 不能定义虚构造函数,但是可以定义虚析构函数
如果派生类中存在动态内存分配,并且其内存释放是在析构函数中实现的,这是必须将析构函数声明为虚函数。
当把析构函数函数声明为虚函数后,通过基类指针释放其所指的派生类对象时,按照构造的逆序真正将派生类对象完全释放。
例程:
析构函数声明为虚函数
调用基类构造函数
调用派生类构造函数
输出派生成员
调用派生类析构函数
调用基类析构函数
析构函数不声明为虚函数
调用基类构造函数
调用派生类构造函数
输出派生成员
调用基类析构函数
包含纯虚函数的类为抽象类。
纯虚函数没有函数体,“=0”本子上是将指向函数体的指针定义为NULL.
不能创建抽象类的对象,但是可以定义抽象类指针和引用,只是他们只能指向派生类对象,用来实现运行时多态。