C++ 调用未知子类的虚拟方法
我有以下设置:C++ 调用未知子类的虚拟方法,c++,polymorphism,abstract-class,virtual-functions,C++,Polymorphism,Abstract Class,Virtual Functions,我有以下设置: 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) {}; }; 如果我有向量父对象,并且我将使用循环遍历向量,如图所示: for (int i = 0; i < parents.size();
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) {};
};
如果我有向量父对象
,并且我将使用循环遍历向量,如图所示:
for (int i = 0; i < parents.size(); i++) {
Parent s = parents[i];
s.foo(-1);
}
for(int i=0;i
我怎么称呼孩子们的食物(他们可以是儿子或女儿)?我目前有两个错误:
变量类型“Parent”是一种抽象类型
变量类型“Parent”是一个抽象类
首先,必须将
子类
和子类
作为父类
的派生类:
class Son : public Parent {
...
};
class Daughter : public Parent {
...
};
然后,要获得多态对象的向量,不能将对象存储在其中。要使多态性发挥作用,必须获取指向对象的指针向量
vector<Parent*> parents;
载体亲本;
或者更好:
vector<shared_ptr<Parent>> parents;
载体亲本;
为什么?
- 无法实例化父对象,因为它是抽象类。您只能创建它的派生类
- 如果父对象不是抽象的,那么代码就可以工作,但如果将子对象或子对象放入向量中,代码就可以工作