【发布时间】:2020-01-06 16:36:52
【问题描述】:
问题
我的理解是,我们可以通过在基类中创建 getNoise 虚拟,然后在任何子类中覆盖它来实现多态。然后通过一个指针向量,我们存储用于调用方法的基类的地址,例如下面的getNosie。
谁能告诉我为什么我的代码不这样做?
代码
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class Animals {
private:
std::string noise = "None";
public:
Animals() = default;
virtual ~Animals() = default;
virtual std::string getNoise() {
return noise;
}
};
class Duck : public Animals {
private:
std::string noise = "Quack!";
public:
using Animals::Animals;
std::string getNoise() override {
return noise;
}
};
class Dog : public Animals {
private:
std::string noise = "Bark!";
public:
using Animals::Animals;
std::string getNoise() override {
return noise;
}
};
class AnimalsContainer {
public:
std::vector<Animals *> animals;
Animals *front;
AnimalsContainer() {
Duck duck;
Dog dog;
animals.push_back(&duck);
animals.push_back(&dog);
front = animals[0];
}
~AnimalsContainer() = default;
};
int main() {
AnimalsContainer animals;
cout << animals.front->getNoise() << endl;
预期输出
期待
Quack!
但我得到了
None
【问题讨论】:
标签: c++ oop polymorphism