我有以下课程:
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...
有解决这个问题的好方法吗?
答案 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;