OO:如何创建函数"addFruit"将水果添加到向量<fruit>中
OO: how to create a function "addFruit" to add fruit into a vector<fruit>
我有:
class fruit
{
}
class apple:fruit
{
}
class pear:fruit
{
}
我想创建一个函数"addFruit"添加水果到水果向量。如:
vector<fruit> fruits;
我该怎么做?
编辑:我试着在基类中放一个虚函数。在子类中做真正的操作。但它失败了。我犯了很多错误。所以我只需要一个清晰的想法和示例代码片段。
要正确使用继承,您需要这样做:
#include <iostream>
#include <vector>
class Fruit
{
public:
virtual void Eat()
{
std::cout << "Mmm.. a fruit!" << std::endl;
}
virtual ~Fruit() {}
};
class Apple : public Fruit
{
public:
void Eat()
{
std::cout << "Mmm.. an apple!" << std::endl;
}
};
class Pear : public Fruit
{
public:
void Eat()
{
std::cout << "Mmm.. a pear!" << std::endl;
}
};
int main()
{
std::vector<Fruit *> fruits;
fruits.push_back(new Pear());
fruits.push_back(new Apple());
fruits.push_back(new Fruit());
for (int i = 0; i < fruits.size(); i++)
fruits[i]->Eat();
return 0;
}
为了利用动态分派,你需要使用指向基类(Fruit *)的指针。否则,它将直接调用Fruit的Eat()方法。
我的回答中的例子允许从Fruit派生的类在需要时重写Eat(),但这不是必需的。如果虚函数为纯函数,则派生类必须实现它。
class Fruit
{
public:
// Cannot instantiate this class, and derived classes must provide this
virtual void Eat() = 0;
};
根据Donotalo的注释,您想要的功能可以实现为:
class FruitCollection
{
private:
std::vector<Fruit *> fruits;
public:
void Add(Fruit *fruit);
};
void FruitCollection::Add(Fruit *fruit)
{
fruits.push_back(fruit);
}
在大多数情况下这可能是多余的,您可能需要比这个极其简单的示例更多的操作。
唔唔唔.....
vector<fruit*> fruits;
fruits.push_back(new apple());
fruits.push_back(new pear());
等等?这就是你想要的吗?
相关文章:
- 添加存储在向量中的大整数的函数出现问题
- 不允许在向量中添加更多元素
- 如何将元素添加到向量的字符串位置
- 有没有办法向这个向量添加元素?
- 这种方式是否可以接受向向量添加unique_ptr?
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- C++ 将子类的对象添加到父类的向量中
- 如何在提升间进程中构建具有给定计数的向量并向其添加元素
- 将不同类型的变量添加到向量中
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 使用 std::transform 将向量向量 (a) 添加到另一个向量向量 (b)
- 继承层次结构并将元素添加到向量
- 测试驱动开发 c++:如何将对象添加到向量中,将歌曲添加到播放列表并对其进行测试
- 如何将对象添加到类中的静态向量
- 对象如何将自身添加到对象类中的向量中?
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- C++ 如何在向量中添加向量?vector.push_back( 向量<> )?
- 如何在CUDA内核中添加向量元素
- 向 NS2 添加向量;编译器错误
- 向向量添加向量