
1.虚拟析构函数虚析构函数的目的是当删除基类指针时能够不仅调用基类的析构函数也要调用派生类的析构函数。如果析构函数不是虚拟的将只调用对应指针的类型的析构函数。如果析构函数是虚拟的将调用相应对象类型的析构函数然后会自动调用基类的析构函数。这和其它虚函数的基于动态联编的道理是一样的。2.在隐式类型转换下c不允许将一种类型的地址赋给另一种类型的指针也不允许将一种类型的引用指向另一种类型。指向基类的引用或指针可以隐式引用派生类对象这称为向上强制转换upcasting。这需要动态联编c使用virtual函数来标识这种动态联编需求。编译器会对虚方法使用动态联编。3.指导原则c设置静态联编为默认选择即不要为不使用的特性付出代价。在基类中的非虚函数也表明不要重新定义该函数。只把需要在派生类中重新定义的方法设置为虚函数。使用虚函数时有内存和执行速度的开销。构造函数不能是虚函数。只有成员函数才能是虚拟的友元函数不能是虚函数友元不是类成员4.编译器处理虚函数的方法给每个对象添加了一个隐藏的虚函数表的指针函数表是一个数组它保存了对象中的虚函数的地址。调用虚函数时由虚函数表来决定调用基类还是派生类中的函数版本。5.纯虚函数c甚至允许纯虚函数有定义。对这句话的理解是纯虚函数只表明所属的类是抽象类不能实例化但并不影响纯虚函数有定义。