gpt4 book ai didi

c++ - 重载运算符返回对基类的引用,如何返回对派生类的引用?

转载 作者:行者123 更新时间:2023-11-30 01:45:44 25 4
gpt4 key购买 nike

我有一个基本异常类(其中包括)一个流操作符:

Base& Base::operator<<(const std::string& str);

此运算符返回 *this

我有几个派生类,如下所示:

class Derived : public Base { };

在某些时候,我创建并抛出一个派生自 Base 的类。像这样的东西:

std::string myStr("foo bar");
throw Derived() << myStr;

我想使用以下方法捕获此异常:

try 
{
[...]
}
catch(Derived& ex)
{
[...]
}

这样做的最佳方式是什么?在 throw 之前将 Base 转换为 Derived 是否可以?我可以将基类更改为模板而不是定义这些派生类吗? [...]?

最佳答案

问题出在 throw 关键字中,而不是在返回的引用中。引用很好地指向了基类和派生类。 throw 关键字使用声明的类型而不是对象的多态类型来抛出。要抛出异常的多态类型,可以使用Polymorphic Exception C++ idiom .您需要在基类中声明一个虚拟的 Raise() 方法,然后在派生类中用实现 throw *this; 覆盖该方法。在这种情况下,在派生类中声明的引用类型 *this 将匹配其多态类型,除非您忘记在某些派生类中覆盖 Raise() 方法。

关于c++ - 重载运算符返回对基类的引用,如何返回对派生类的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34138881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com