我做了一些研究来找出为什么构造函数不能是虚拟的。我在这里巩固我的理解。
我将首先解释什么是虚函数,然后根据第一个解释解释为什么构造函数不能是虚函数。
什么是virtual function
?
虚函数是基类中的函数或方法,可以在派生类中由具有相同签名的函数重新定义或覆盖。换句话说,虚函数允许在派生类中自定义基类方法的实现。它需要用
virtual
关键字声明。在虚函数调用时,根据调用对象的类型(动态绑定),在运行时决定选择哪个版本的函数定义(在基类或派生类中)。当一个函数被声明为虚函数时,它告诉编译器调用虚函数的对象的类型应该只在运行时确定。然后根据对象的类型,将函数调用绑定到函数定义,并调用适当的函数。
为什么 aconstructor
不能是虚拟的?
当一个函数被声明为虚函数时,它告诉编译器调用该函数的对象的类型应该只在运行时确定,然后根据对象的类型调用适当版本的函数。
如果构造函数被声明为虚拟的,它会告诉编译器调用构造函数的对象类型应该在运行时确定。但是对于构造一个对象,应该在编译时而不是在运行时知道对象的确切类型。这就是构造函数不能是虚拟的原因。
我希望 SO 成员纠正两个答案中的错误(如果有)。如果您可以通过将其重写为您的答案来纠正答案,而不仅仅是指出错误,我认为这将对我和其他人有所帮助。