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

C++ 创建未知类的对象(两个继承类),c++,class,inheritance,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; } 但是编译器给了我

我有以下课程:

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...
有没有解决这个问题的好方法?

使用指针:

A * object = NULL;
if (/*Test*/) {
    object = new Aa;
} else {
    object = new Ab;
}
A *object;
if (/*Test*/) {
    object = new Aa();
} else {
    object = new Ab();
}
使用指针:

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

正如其他人指出的,C++中的运行时多态性通过指针或引用来工作。


一般来说,你正在寻找.< /p>

,正如其他人指出的,C++中的运行时多态性通过指针或引用来工作。


一般来说,您正在查找。

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

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

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

“A”是一个抽象类。对于commonFunction,它没有自己的实现,因此无法直接实例化。只有它的后代可以实例化,假设它们实现了所有的抽象方法

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

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

您的基类还需要一个虚拟析构函数。您的基类还需要一个虚拟析构函数。