Edd*_*Edd 1 c++ inheritance constructor
我有两个类,其中一个是另一个的子类,并且仅通过它包含一个额外的成员变量对于其父事实而不同.我没有使用默认构造函数,将对单个对象的引用作为constructors参数传递.我想是父的构造函数来检查这个对象,然后确定是否要构建父类(在大多数情况下)的实例或子类(在少数特殊情况时).
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();
}
};
Run Code Online (Sandbox Code Playgroud)
我知道工厂设计模式,但不想只为此拥有工厂对象.我宁愿将Superclass初始化内容复制到Subclass(看起来很糟糕),然后检查创建Superclass的每个点的对象,然后调用相应的构造函数:
Superclass* class;
if(object->CreateSubclass())
{
class = new Subclass(obj);
}
else
{
class = new Superclass(obj);
}
Run Code Online (Sandbox Code Playgroud)
这种事情是否可行,如果是这样,我将如何从Superclass构造函数中调用子类构造函数?我已经尝试过调用Subclass(object),但是我遇到了需要在另一个之前定义Superclass和Subclass的问题.
感谢您提供的任何建议.
如果你是针对工厂类,为什么不只是一个静态函数?
class Subclass
{
public:
static Superclass* create(const MyObject* const object)
{
if (object->createSubclass())
{
return new Subclass(object);
}
else
{
return new Baseclass(object);
}
}
// ...
}
// ...
Superclass* const myInstance = Subclass::create(myObject);
Run Code Online (Sandbox Code Playgroud)
(我把静态类放在Subclass中,因为它需要超类和子类实现,但你可以很容易地将它放在共享命名空间或其他东西中,或者甚至将声明放在基类中但是将实现放在cpp中)
您现在已经获得了工厂类的大部分好处,没有比以前更多的代码.你只是缺少传递它的能力或者很容易将它重构为多个实现.
| 归档时间: |
|
| 查看次数: |
3925 次 |
| 最近记录: |