C ++中多态性在幕后发生了什么?

时间:2019-03-13 16:05:20

标签: c++ polymorphism abstract-class virtual-functions

假设我们有以下课程:

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而言,尽管在基类中已实现,但我们仍在重载,因此使用派生类的实现它还会做某种隐式转换吗?

从本质上讲,这不是将要发生的问题,而是有关正在发生的情况的问题。

0 个答案:

没有答案