虚构造与虚析构
构造函数能否是虚函数为什么?
构造函数不能定义为虚函数。
对象的构造过程:
1、分配内存
2、执行父类的构造
3、执行成员构造
4、执行子类构造
如果构造函数是虚函数则可能会被子类覆盖,当构造子类对象时,会先调用父类构造。
两种猜想:
1、由于它实际是子类对象,所以会调用覆盖后的构造函数,也就是子类构造,而执行子类构造前又必须执行父类构造,这样就会形成死循环,因此构造函数不能定义为虚函数。
2、由于它实际是子类对象,所以会调用覆盖后的构造函数,但此时子类对象没构造完成,所以无法调用,也就不能形成多态,因此定义为虚函数也没有意义。
析构函数能否是虚函数为什么?
析构函数可以定义为虚函数。
对象的析构过程:
1、执行子类析构
2、执行成员析构
3、执行父类的析构
4、释放内存
如果析构函数是虚函数则肯定会被覆盖,当析构一个子类对象时,会先执行子类的析构,再执行到父类析构时