2013-10-19 113 views
0

这如何线工作假设b是从中D1推导并Tell是其在d1定义和以及b类型转换对象

D1 d1; 
((D1)((B)d1)).Tell(); 
一个虚拟函数的基类
+0

这看起来不正确,因为C-风格转换尝试不同的C++投射在一个订单,但['dynamic_cast'不是其中之一](http://stackoverflow.com/a/17598055/183120)。 – legends2k

+1

我在你的代码里没有'b'。你的意思是'B'? – jalf

回答

2

它可能无法正常工作,除非D1有一个构造函数从B转换。如果是这样的情况下,“工程”通过创建一个临时的对象,并调用该函数(创建另一个临时B型之后);这几乎肯定不是你想要做的。

如果您实际上正在转换为指针或引用类型,那么它将“有效”,如果d1的类型为D1,因为转换互相抵消;但如果它是另一种类型,那么您将转换为错误的类型并调用未定义的行为。

-1

你提到D1从B处产生,但have't提及D1。 假定b是基类& D1,D1都从步骤b &分不清是虚拟衍生,所以它将调用给的主体从D1