为什么我们在c ++中没有虚拟构造函数?
答案 0 :(得分:0)
C ++类不是first class objects - 在java中,没有办法制作一个引用类的变量并根据这个变量调用构造。因此,虚拟构造函数没有意义,因为您始终知道您创建的对象的类型。
答案 1 :(得分:0)
它会如何运作?你想用它做什么?
你需要有一个对象才能拥有一个虚拟表/函数表,但是当你在构造函数中时,你还没有一个对象,因为它正在构建中。
你可能想要的是一个抽象的工厂。这将以“抽象”的方式创建一个不同的类,例如:
class Base { public: virtual ~Base() {} };
class Derived1 : public Base
{
};
class Derived2 : public Base
{
};
class BaseFactory
{
public:
virtual ~BaseFactory() {}
virtual Base * create() const = 0;
};
class Derived1Factory : public BaseFactory
{
public:
// could also return Derived1*
Base * create() const { return new Derived1; }
};
class Derived2Factory : public BaseFactory
{
public:
// could also return Derived2*
Base * create() const { return new Derived2; }
};
// abstractly construct a Base
Base * createABase( const BaseFactory & fact )
{
return fact.create();
}