将基础对象返回到升级派生类的最合适方法是什么?

时间:2011-05-17 17:07:08

标签: c++ inheritance casting

struct B {};  // B contains data members
struct D : B {};  // D doesn't contain ANY data member

B g_b;  // global object
D& fun ()  // want to return by reference ONLY
{
  return <???>(g_b);  // how ???
}

[注意:我想避免重载构造函数(或赋值),例如D(const B&)。]

3 个答案:

答案 0 :(得分:5)

你要做的是非法的。 g_b不是D

答案 1 :(得分:2)

没有合适的演员。这实际上是未定义的行为。

有关详细信息,请参阅此主题:Downcasting a base type

注意:当您将基类转换为派生类时,术语是向下转换;当您将派生类型转换为基类时,将使用术语 upcast

答案 2 :(得分:1)

这是未定义的行为。
您可以使用dynamic_cast执行基类指针/对派生类指针/引用的引用的安全向下转换。它在指针的情况下返回null,或者在引用的情况下抛出异常。