创建未知类的对象(两个继承的类)

时间:2010-04-27 16:45:31

标签: c++ class inheritance

我有以下课程:

class A {
    void commonFunction() = 0;
}

class Aa: public A {
    //Some stuff...
}

class Ab: public A {
    //Some stuff...
}

根据用户输入,我想创建Aa或Ab的对象。我的imidiate想法是这样的:

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...

有解决这个问题的好方法吗?

4 个答案:

答案 0 :(得分:7)

使用指针:

A *object;
if (/*Test*/) {
    object = new Aa();
} else {
    object = new Ab();
}

答案 1 :(得分:2)

A * object = NULL;
if (/*Test*/) {
    object = new Aa;
} else {
    object = new Ab;
}

答案 2 :(得分:2)

正如其他人所指出的,C ++中的运行时多态性可以通过指针或引用来工作。 一般来说,您正在寻找Factory Design Pattern

答案 3 :(得分:2)

'A'是一个抽象类。它没有自己的commonFunction()实现,因此无法直接实例化。只有它的后代才能被实例化(假设它们实现了所有的抽象方法)。

如果要根据输入实例化后代类,然后在公共代码中使用该对象,请执行以下操作:

A* object;
if (/*Test*/) {
    object = new Aa;
} else {
    object = new Ab;
}
...
object->commonFunction();
...
delete object;