我有两个类,其中一个是另一个的子类,不同之处仅在于它包含父级的附加成员变量。我没有使用默认的构造函数,将对单个对象的引用作为构造函数参数传入。我想让父对象的构造函数检查这个对象,然后确定是构造一个父类(大多数情况下)还是子类(在一些特殊情况下)的实例。C++ - 产生子类的实例的超类构造函数
class Superclass
{
public:
Foo foo;
Superclass(MyObject* object)
{
foo = object->GetFoo();
if(object->CreateSubclass())
{
//Create Subclass
}
else
{
//Create Superclass
}
}
};
class Subclass : public Superclass
{
public:
Barr barr;
Subclass(MyObject* object)
{
barr = object->GetBarr();
}
};
我知道工厂的设计模式,但不希望只有这样的工厂对象。我宁愿复制超类初始化的东西到子类(这似乎是坏的),然后在每一个地方一个超类中创建点的考察对象,然后调用适当的构造函数:
Superclass* class;
if(object->CreateSubclass())
{
class = new Subclass(obj);
}
else
{
class = new Superclass(obj);
}
这算哪门子的可能的事情,如果是的话,我将如何去从超类构造函数调用子类的构造函数?我试过打电话给Subclass(object)
,但遇到需要在另一个之前定义的超类和子类的问题。
感谢您提供任何建议。
为什么你不想要一个工厂功能?这是他们使用的确切位置。 – Rudi 2010-07-16 11:25:07
我想要使用它的地方对于一个工厂来说几乎看起来太琐碎了,再加上我正在处理的插件需要额外的膨胀和维护,以增加每个新类(不是我的!)。也许工厂是要走的路,但它大约需要5行,而且从可维护性的角度来看,我通常会担心会有太多的小琐碎类。很显然,班级太少了,如果不是更糟糕的话,但是一个五线班的班主任感觉不好。 – Edd 2010-07-16 12:17:19
他说的是使用静态工厂方法,而不是抽象工厂类。 – gtrak 2010-07-17 02:26:07