假设是派生b
自的基类,并且是定义在和 以及 中的虚函数,这条线是如何工作的D1
Tell
d1
b
D1 d1;
((D1)((B)d1)).Tell();
它可能不起作用,除非D1
有一个构造函数可以从B
. 如果是这种情况,它通过创建一个临时对象并在其上调用函数来“工作”(在创建另一个临时类型之后B
);这几乎肯定不是你想要做的。
如果您实际上是在转换为指针或引用类型,那么如果d1
有类型,它就会“起作用”,D1
因为转换会相互抵消;但如果它是另一种类型,则您将转换为错误的类型并调用未定义的行为。
你提到 d1 是从 b 派生的,但没有提到 D1。假设b是基类&d1,D1都派生自b&Tell是虚的,所以会从D1调用Tell的主体