将基对象返回到向上转换的派生类的最合适方法是什么?

发布于 2024-11-08 04:31:09 字数 302 浏览 0 评论 0原文

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&)。]

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 ???
}

[Note: I want to avoid overloading constructor (or assignment) such as D(const B&).]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

对你而言 2024-11-15 04:31:09

你试图做的事情是非法的。 g_b 不是 D

What you're trying to do is illegal. g_b is not a D.

瞎闹 2024-11-15 04:31:09

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

有关详细信息,请参阅此主题:向下转型基本类型

注意:术语是向下转型 当你将基类转换为派生类时;当将派生类强制转换为基类时,将使用术语向上转换

No suitable cast. That is in fact undefined behavior.

For detail, see this topic: Downcasting a base type

Note : the term is downcast when you cast base to derived class; and the term upcast is used when you cast derived to base class.

眉目亦如画i 2024-11-15 04:31:09

这是未定义的行为。
您可以使用dynamic_cast执行基类指针/引用到派生类指针/引用的安全向下转换。如果是指针,则返回 null;如果是引用,则抛出异常。

That is undefined behavior.
You can use dynamic_cast for performing safe down casting of Base class pointer/reference to derived class pointer/reference. It returns a null in case of pointers or throws an exception in case of references.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文