Итак, у меня есть задание, связанное с исключениями и использующее их в моей текущей программе адресной книги, в которой сосредоточено большинство домашних заданий. Я решил поиграть с исключениями и всей попыткой поймать вещь и использовать классный дизайн, и это то, что мне в конечном итоге придется сделать для моего задания через пару недель. У меня есть рабочий код, который отлично проверяет исключение, но я хочу знать, есть ли способ стандартизировать мою функцию сообщения об ошибке (например, мой вызов what()):
Вот мой код:
#include <iostream>
#include <exception>
using namespace std;
class testException: public exception
{
public:
virtual const char* what() const throw() // my call to the std exception class function (doesn't nessasarily have to be virtual).
{
return "You can't divide by zero! Error code number 0, restarting the calculator..."; // my error message
}
void noZero();
}myex; //<-this is just a lazy way to create an object
int main()
{
void noZero();
int a, b;
cout << endl;
cout << "Enter a number to be divided " << endl;
cout << endl;
cin >> a;
cout << endl;
cout << "You entered " << a << " , Now give me a number to divide by " << endl;
cin >> b;
try
{
myex.noZero(b); // trys my exception from my class to see if there is an issue
}
catch(testException &te) // if the error is true, then this calls up the eror message and restarts the progrm from the start.
{
cout << te.what() << endl;
return main();
}
cout <<endl;
cout << "The two numbers divided are " << (a / b) << endl; // if no errors are found, then the calculation is performed and the program exits.
return 0;
}
void testException::noZero(int &b) //my function that tests what I want to check
{
if(b == 0 ) throw myex; // only need to see if the problem exists, if it does, I throw my exception object, if it doesn't I just move onto the regular code.
}
То, что я хотел бы сделать, это сделать так, чтобы моя функция what() возвращала значение, зависящее от того, какой тип ошибки вызывается. Так, например, если бы я вызывал ошибку, которая выглядела как верхний номер, (а), чтобы увидеть, была ли она нулевой, и если бы это было так, она бы установила сообщение, что "у вас не может быть числитель нуля", но все еще находится внутри функции what(). Вот пример:
virtual const char* what() const throw()
if(myex == 1)
{
return "You can't have a 0 for the numerator! Error code # 1 "
}
else
return "You can't divide by zero! Error code number 0, restarting the calculator..."; // my error message
}
Это явно не сработает, но есть ли способ сделать это, поэтому я не пишу другую функцию для каждого сообщения об ошибке?