【发布时间】:2020-03-26 15:01:00
【问题描述】:
我有以下课程设置:
class A {
public:
virtual void show() { // "show A" }
}
class B : A {
public:
void show() override { // "show B"}
}
class MainClass {
public:
MainClass(const A &myA) : myPolymorphicClass(std::make_shared<A>(myA)) {}
void doShow() {
myPolymorphicClass.show();
}
private:
std::shared_ptr<A> myPolymorphicClass;
}
int main {
A myA;
B myB;
MainClass myAClass(myA);
myClass.doShow(); // Will print "show A"
MainClass myBClass(myB);
myClass.doShow(); // Will also print "show A"
}
我希望调用相应的 show(),但它不是很有效。我知道这是因为我正在做 A 的 make_shared 将指向 A 的 show() 而不是 B,但是如果我做 B 的 make_shared 那么我会遇到相反的问题。如何设置此类以便获得我想要的多态行为?
此外,我很确定我可以使用原始指针来实现这一点,但我确实在努力让它与智能指针一起使用。
非常感谢!
【问题讨论】:
-
原始指针也会有同样的问题。你需要一个虚拟克隆功能。
标签: c++ pointers inheritance polymorphism