当前位置: 首页C++C++面向对象正文 为什么基类的构造函数不能定义为虚函数? C++面向对象 0 7.2K 虚函数的调用依赖于虚函数表,而指向虚函数表的指针vptr需要在构造函数中进行初始化,所以无法调用定义为虚函数的构造函数。 C++面向对象 帅地永久会员 打赏 收藏 海报挣佣金 推广链接
评论(2)
1、构造一个对象的时候,必须知道对象的实际类型,而虚函数是在运行期间确定实际类型的。如果构造函数为虚函数,则在构造一个对象时,由于对象还未构造成功,编译器还无法知道对象的实际类型,是该类本身还是派生类。无法确定。
2、虚函数的执行依赖于虚函数表,而虚函数表是在构造函数中初始化的,即初始化vptr,让它指向虚函数表。如果构造函数为虚函数,则在构造对象期间,虚函数表还没有被初始化,将无法进行。
因为创建一个对象时需要确定对象的类型,而虚函数是在运行时确定其类型的。