如何在C ++中的异常类中定义派生类中的what()函数?

时间:2016-06-15 07:59:09

标签: c++

在此代码中:

#include <iostream>
#include <exception>
using namespace std;

class myexception : public exception
{
     virtual const char* what() const throw()  //<---**** Stared statement.
    {
     return "My exception happened";
    }
};

stared 语句是什么意思。使用 const 关键字和 char * 类型的原因是什么?

我对两个const关键字感到困惑。我知道const的基本用法,比如声明一个存储不可更改值的变量.....有点像#define但是当它与函数一起使用时(比如在参数中),这是令人困惑的。我对这行中使用char *而不是char感到困惑。另外在const之前指定throw()的目的是什么?

2 个答案:

答案 0 :(得分:2)

[更新]由于作者提出了更多问题,我将用两个部分更新答案。

首先,这个函数是std::exception::what()的覆盖函数,基函数是这样定义的,所以覆盖的版本必须是相同的语法。

然后让我们将声明分成两部分。

  1. 返回值const char*
  2. what() const throw()
  3. 之后的部分

    首先,检查return语句return "My exception happened";,它返回类似const c的字符串,类型为const char*,因此返回值就是这样定义的。

    其次,const之后的what()表示它是一个const函数,它不会修改类的任何成员(虽然mutable除外)。 throw()意味着它永远不会抛出。

答案 1 :(得分:0)

const char *表示调用者对what()将接收一个字符串,并且无法更改字符串(指针指向的char)。 这是std :: exception :: what()的重写,所以你可以向你自己的异常返回一个新的解释(这就是为什么你必须返回const char *,原始方法也是如此)