假设我们有以下课程:
class A {
virtual void foo() {} //implemented
virtual void bar() = 0;
};
class B: public A {
virtual void foo() override {} //implemented
virtual void bar() override {} //implemented
};
class C: public A {
virtual void foo() override {} //implemented
virtual void bar() override {} //implemented
};
那我们可以这样说:
shared_ptr<A> spa;
if (someCondition) {
spa = make_shared<B>();
} else {
spa = make_shared<C>();
}
spa->foo();
spa->bar();
后台发生了什么?显然,纯虚拟函数bar()必须在派生类中实现-那么共享ptr是否使用隐式强制转换来使用派生类实现?就bar而言,尽管在基类中已实现,但我们仍在重载,因此使用派生类的实现它还会做某种隐式转换吗?
从本质上讲,这不是将要发生的问题,而是有关正在发生的情况的问题。