C ++多态性和向量,将派生类向量指向向量的基类

时间:2013-04-06 10:16:11

标签: c++ pointers vector polymorphism

说: Apple源自基础Fruit Class,然后有一个ApplePicker类派生自基础FruitPicker类 ApplePicker类有vector<Apple> appleList,Fruit picker类有一个指向vector<Fruit>的指针,即vector<fruit>* fruitList

我需要能够将向量设置为此指针,因此抽象方法可以在水果选择器类中运行(因为它们只关注水果成员)。但是当我尝试这样做时,我无法设置它:

this->fruitList = &(this->AppleList);

它给了我错误cannot convert to vector<Apple> to vector<Fruit>。我试过静态演员,它给了我同样的错误。我对非向量基类和派生类做了类似的事情,它很好。

我是C ++的新手,我通过NDK在Android上使用它。

所以我试图做的事情是不可能的,我必须使用像vector<Fruit*>这样的指针向量。

1 个答案:

答案 0 :(得分:3)

考虑一下:如果vector<Apple>可以替换vector<Fruit>(换句话说,如果您希望发生的转化实际上是合法的),那么您可以在输入中提供vector<Apple>期望vector<Fruit>的函数。

期望vector<Fruit>的函数可能会向该向量添加Banana,因为BananaFruit(暂时忽略了你会得到的事实) 切片如果你的向量存储类型Fruit的对象而不是指向这些对象的指针,但这是一个不同的故事)。如果您将vector<Apple>传递给该函数,则会破坏vector<Apple>的不变量(即,它只能包含苹果)。

OOP中的继承适用于一种类型能够普遍替换另一种类型的情况,A可以替换B这一事实并不意味着V<A>可以替换V<B> 1}}。

如果您需要编写适用于这两种向量的通用例程,请使用模板来实现编译时的通用性。