【发布时间】:2010-07-16 11:22:26
【问题描述】:
我有两个类,其中一个是另一个的子类,不同之处仅在于它包含对其父级的附加成员变量。我没有使用默认构造函数,而是传入对单个对象的引用作为构造函数参数。我希望父类的构造函数检查这个对象,然后确定是构造父类的实例(在大多数情况下)还是子类的实例(在少数特殊情况下)。
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),但遇到了需要先定义超类和子类的问题。
感谢您提供的任何建议。
【问题讨论】:
-
为什么不想要一个工厂函数?这是使用它们的确切位置。
-
我想在哪里使用它对于工厂来说似乎太微不足道了,再加上我正在开发的插件需要为每个添加的新类进行额外的膨胀和维护(不是我做的) !)。也许工厂是要走的路,但它大约有 5 行长,从可维护性的角度来看,我通常会担心有太多的琐碎小类。显然,课程太少也同样糟糕,如果不是更糟的话,但 5 行课程感觉是个坏主意。
-
他是说使用静态工厂方法,而不是抽象工厂类。
-
对不起-我真的应该学会阅读!这是漫长一周中的星期五!
标签: c++ inheritance constructor