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

pt1*_*123 4 c++ polymorphism pointers vector

说:Apple 是从 FruitPicker 基类派生的,那么 ApplePicker 类是从 FruitPicker 基类派生的。
ApplePicker 类有一个vector<Apple> appleList,Fruit picker 类有一个指向vector<Fruit>ie的指针vector<fruit>* fruitList

我需要能够将向量设置为该指针,以便可以在水果选择器类中运行抽象方法(因为它们只涉及水果成员)。但当我尝试这样做时,我在设置时遇到了麻烦:

this->fruitList = &(this->AppleList);
Run Code Online (Sandbox Code Playgroud)

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

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

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

And*_*owl 5

想一想:如果vector<Apple>可以替代vector<Fruit>(换句话说,如果您期望发生的转换实际上是合法的),那么您可以为vector<Apple>需要vector<Fruit>.

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

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

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