我有以下设置:
class Parent {
virtual void foo(int x) = 0;
};
class Son : public Parent {
void foo(int x) {};
};
class Daughter : public Parent {
virtual void foo(int x) {};
};
如果我有vector<Parent> parents
并且我正在通过带有循环的向量:
for (int i = 0; i < parents.size(); i++) {
Parent s = parents[i];
s.foo(-1);
}
如何给孩子打电话? foos(他们可能是儿子或女儿)?我目前遇到两个错误:
Variable type 'Parent' is an abstract
Variable type 'Parent' is an abstract class
答案 0 :(得分:1)
首先,您必须将Son
和Daughter
作为Parent
的派生类:
class Son : public Parent {
...
};
class Daughter : public Parent {
...
};
然后,要获得多态对象的矢量,则无法将对象存储在其中。你必须使用指向对象的指针向量来实现多态性。
vector<Parent*> parents;
或更好:
vector<shared_ptr<Parent>> parents;
为什么?