创建未知类的对象(两个继承的类)
Posted
技术标签:
【中文标题】创建未知类的对象(两个继承的类)【英文标题】:Create object of unknown class (two inherited classes) 【发布时间】:2010-04-27 16:45:30 【问题描述】:我有以下课程:
class A
void commonFunction() = 0;
class Aa: public A
//Some stuff...
class Ab: public A
//Some stuff...
根据用户输入,我想创建一个 Aa 或 Ab 的对象。我的初衷是这样的:
A object;
if (/*Test*/)
Aa object;
else
Ab object;
但是编译器给了我:
error: cannot declare variable ‘object’ to be of abstract type ‘A’
because the following virtual functions are pure within ‘A’:
//The functions...
有什么好办法解决这个问题吗?
【问题讨论】:
你的基类也需要一个虚拟析构函数。 【参考方案1】:使用指针:
A *object;
if (/*Test*/)
object = new Aa();
else
object = new Ab();
【讨论】:
【参考方案2】:A * object = NULL;
if (/*Test*/)
object = new Aa;
else
object = new Ab;
【讨论】:
【参考方案3】:正如其他人所指出的,C++ 中的运行时多态性通过指针或引用工作。 一般来说,您正在寻找Factory Design Pattern。
【讨论】:
【参考方案4】:'A' 是一个抽象类。它没有自己的 commonFunction() 实现,因此不能直接实例化。只有它的后代可以被实例化(假设它们实现了所有的抽象方法)。
如果您想根据输入实例化后代类,然后在通用代码中使用该对象,请改为执行以下操作:
A* object;
if (/*Test*/)
object = new Aa;
else
object = new Ab;
...
object->commonFunction();
...
delete object;
【讨论】:
以上是关于创建未知类的对象(两个继承的类)的主要内容,如果未能解决你的问题,请参考以下文章