1. 构造函数中可以调用虚函数吗
可以,只是不会产生动态行为,因为构造函数是从基类开始构造,基类在调用虚函数时,子类还未构造,所以调用的是基类的函数。
2.析构函数可以调用虚函数吗
如果在父类析构函数中调用虚函数,其实际调用的是子类的函数,而此时子类析构函数已经把数据销毁了,会出现不可知的结果。
3.析构函数可以调用纯虚函数吗
不可以,编译会出错。
5.析构函数可以是纯虚函数吗
可以,但是基类必须提供该析构函数的定义,此时基类是抽象类。抽象类的纯虚函数必须由派生类实现,除析构函数可以自身定义外。
6.构造函数可以是虚函数吗
不可以,但可以是private
7.析构函数可以是虚函数吗
可以。也可以是private,这样类只能在堆上构造
8.普通成员函数可以调用虚函数吗
可以,如果基类和子类普通成员函数完全相同,子类会隐藏基类的成员函数,产生动态行为。
9.声明析构函数为虚函数原因
如果我们删除一个指向派生类对象的基类指针,而基类析构函数又是非虚的话, 那么就会先调用基类的析构函数,派生类的析构函数得不到调用
总结:C++动态绑定机制仅适用于完全构造的对象,构造和析构函数一样,对象不完整。 如果在部分构造的函数对象上动态绑定,行为很怪异(与实现有关)