В чем смысл этого заголовка (virtual const char * what() const throw())?
class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
};
Извините, этот вопрос может показаться глупым, но мне сложно разобрать заголовок. Может ли кто-нибудь описать на английском языке, что на самом деле означает заголовок? Первое, что кажется странным для меня, - это ключевое слово virtual
. Класс myexception
не является базовым классом и наследуется от уже реализованного класса exception
, поэтому зачем использовать virtual
? Я предполагаю, что const
предназначен для типа возвращаемого значения, который является строкой c-стиля, которая является константой, а другая const
должна убедиться, что ничего не может изменить этот объект (может ли кто-нибудь сказать мне, что этот объект может быть?). Я понятия не имею, что именно делает throw()
, никогда не видел этот синтаксис раньше.
Ответы
Ответ 1
виртуальный
Ничего не добавляет, поскольку переопределенный метод уже является виртуальным. Вы правы: его можно опустить.
const char * what()
Функция-член с именем what()
которая не принимает аргументов и возвращает указатель на const char
.
Const
Функция-член может быть вызвана с помощью указателя const
или ссылки на экземпляр этого класса или производного класса.
бросить()
Не исключает никаких исключений.
Ответ 2
Ключевое слово virtual
является необязательным (вы можете пропустить его или явно записать - без разницы), когда вы переопределяете уже виртуальный метод из базового класса (например, в этом случае). Ваши замечания по двум ключевым словам const
почти правильны. Это основной C++.
Ответ 3
Это дополнительный вопрос.
Благодаря user207421, из вашего объяснения... Функция-член может вызываться через указатель const или ссылку на экземпляр этого класса или производного класса.
Означает ли это, что what() является закрытой функцией-членом, которая также может вызываться вне класса?