当前位置: 首页 > 知识库问答 >
问题:

从std::runtime_error派生:如何访问基类信息?

胡锋
2023-03-14

首先,我确实在谷歌上做了一个快速搜索,没有一个解释我拍摄的目的。

我的问题是如何在成员函数中访问该消息,例如what()(std::exception中的虚函数)?父类中没有定义getMessage()或类似的函数,如果调用what()恰好是我要重写的函数,那么调用该函数是非常没用的。

我使用的是Visual Studio Community 2015,因此编译器特定的方法是可以的,但我更喜欢可移植的解决方案。

共有1个答案

广宏远
2023-03-14

指定要使用基类的what而不是自己的:

const char* what() const noexcept override {
    auto base_msg = std::runtime_error::what();
    return /* something using base_msg */;
}

但是,在what中,除了保持constnoext为true,还返回一个指向函数调用寿命较长的数据的指针之外,实际上在what中可以做的并不多。您可以在构造函数中进行格式设置,并返回类包含的缓冲区。请注意,在尝试抛出异常时,您最不希望发生的事情是另一个错误。

 类似资料:
  • 我理解您可以从派生类访问基类的成员,然而,我有一个函数需要指向我的基类作为一个整体的指针。例如: 有没有办法从派生类中获得指向这个基类的指针?

  • 我创建了Angular2 Typescript项目。我有很多表格,所以我想有一个类似基本组件的东西。 这是我的基本组件: 现在有我的子组件。我想从http获取所有项目,然后将其分配给基类 知道如何从订阅方法访问基字段吗?

  • 问题内容: 为什么在C#中,不允许派生类具有比其基类更大的可访问性。 例如,这将产生错误:可访问性不一致:与“ DerivedClass”类相比,基类“ BaseClass”的访问性较差 以及为什么在Java中允许它。 问题答案: 更新 :这个问题是我在2012年11月13日发布的博客的主题。感谢您提出的好问题! 为什么在C#中,不允许派生类具有比其基类更大的可访问性? 除了其他好的答案之外,请考

  • 下面是一个人为的例子:(实际代码中使用的命名方案太令人困惑) 我有一个班主任,他是第三方图书馆的一部分,不可更改。我也有一些课程延伸到父亲;比如儿子。祖父有一个类似这样的构造函数: 这个构造函数中实际发生的事情并不重要。重要的是,它所做的任何事情都必须由所有派生类完成,因此对的调用是每个派生类构造函数的第一行。这里的含义是,祖父的所有后代的构造函数,无论距离有多远,都必须始终调用super(或调用

  • 我有一个应用程序,它由一个服务器组成,该服务器可以有多个两种类型的客户端,即用户客户端和设备客户端。为此,我有一个客户端基类的向量,我将在其中添加新客户端,因为它们连接到服务器。这是我所拥有的简化版本: 我有下面的UML表示: 我怀疑这张图是否代表了正确的意图。也许我对UML不是很有经验,这就足够了,但是我认为这个图没有清楚地描述服务器中的向量将包含用户和设备而不是客户端的事实。我不知道我是否需要