1.反问:
在回答这个问题之前,建议问提问者–“想要将构造函数定义为虚函数的目的是什么?”
2.原因:
构造函数没有必要定义成虚函数,也不允许定义成虚函数.
首先不允许(不可能):
从虚函数实现原理看,将构造函数定义为虚函数是无法实现的。因为虚函数的实现依赖虚函数表(vftb)和虚函数表指针(vptr),而这两者是在构造函数调用之前是不存在的。
没有必要:
我们将成员函数定义为虚函数,主要意图是实现"多态",即利用基类指针指向子类对象实例,然后通过基类指针调用子类(虚)函数,从而实现“一个接口,多种形态”的效果。那对于虚的构造函数是想动态的创建不同的对象?
a.在创建对象时,我们是要明确的知道想要创建某个具体类型的变量。
b.构造函数是在创建一个对象时自动调用的,不能通过基类指针后者子类调用。
c.构造函数只是在创建对象时被调用一次,不像其他函数可以多次调用。