C++ 如何在成为指向基类的指针后保留子类方法的使用?
当我创建一个C++ 如何在成为指向基类的指针后保留子类方法的使用?,c++,oop,polymorphism,C++,Oop,Polymorphism,当我创建一个Animal指针来固定Duck对象,并使用一个返回enum的方法make\u choice时,看起来好像使用的是属于基本Animal类的方法,而不是派生的Duck类。如何保留派生类方法的使用 #include <iostream> #include <vector> #include <memory> using namespace std; enum Choice{None, Egg, Bone}; class Animal { prot
Animal
指针来固定Duck
对象,并使用一个返回enum
的方法make\u choice
时,看起来好像使用的是属于基本Animal
类的方法,而不是派生的Duck
类。如何保留派生类方法的使用
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
enum Choice{None, Egg, Bone};
class Animal {
protected:
std::string noise = "None";
public:
Animal() = default;
virtual ~Animal() = default;
virtual std::string getNoise() {
return noise;
}
virtual Choice make_choice(){
return None;
}
};
class Duck : public Animal {
public:
Duck() {
noise = "Quack!";
}
Choice make_choice() override {
return Egg;
}
};
int main() {
Duck duck;
cout << duck.make_choice() << endl; // should be 1 for Egg
std::shared_ptr<Animal> duckPtr = std::make_shared<Animal>(duck);
cout << duckPtr->make_choice() << endl; // also should be 1 for Egg, but is 0 for None
return 0;
};
std::make_分享所有使Duck
不同于动物的东西
你想要
std::shared_ptr<Animal> duckPtr = std::make_shared<Duck>(duck);
std::shared_ptr duckPtr=std::make_shared(duck);
或者只是
std::shared_ptr<Animal> duckPtr = std::make_shared<Duck>();
std::shared_ptr duckPtr=std::make_shared();
寻址但是如果指针以后需要存储在动物指针数组中呢?从评论来看
std::shared_ptr<Animal> animals[2];
animals[0] = duckPtr;
std::共享动物[2];
动物[0]=鸭PTR;
这是完全合法的。不需要额外的工作。std::make_分享所有使鸭子不同于动物的东西
你想要
std::shared_ptr<Animal> duckPtr = std::make_shared<Duck>(duck);
std::shared_ptr duckPtr=std::make_shared(duck);
或者只是
std::shared_ptr<Animal> duckPtr = std::make_shared<Duck>();
std::shared_ptr duckPtr=std::make_shared();
寻址但是如果指针以后需要存储在动物指针数组中呢?从评论来看
std::shared_ptr<Animal> animals[2];
animals[0] = duckPtr;
std::共享动物[2];
动物[0]=鸭PTR;
这是完全合法的。无需额外工作。更改std::共享(duck)代码>到std::使_共享(duck)
但是如果以后指针需要存储在动物指针数组中怎么办?不,只需更改右侧,不要更改左侧。更改std::make_shared(duck)代码>到std::使_共享(duck)
但是如果以后指针需要存储在动物指针数组中呢?不,只需更改右手侧,不要更改左手侧。