Я делаю класс исключения, просто сообщает о проблеме на cout
и выходит из программы, как это:наследование классов: статические члены и виртуальные методы
class Exception {
protected:
short code;
string text;
public:
friend ostream& operator <<(ostream& out, const Exception& p_exception) {
return out << p_exception.text;
}
void execute() { cout << text; exit(code);
};
и это конкретные примеры:
class IndexOutOfBoundsException : public Exception {
public:
IndexOutOfBoundsException() {
this->text = "\nERR: An unsuccessful attempt was made to access the index outside the bounds of the array!";
code = 1;
}
};
class IndexOfEmptyFieldException : public Exception {
public:
IndexOfEmptyFieldException() {
this->text = "\nERR: An unsuccessful attempt was made to access the index of an empty field!";
code = 2;
}
};
class AllocationFailureException : public Exception {
public:
AllocationFailureException() {
this->text = "\nERR: An unsuccessful attempt was made to allocate dynamic memory!";
code = 3;
}
};
В моей голове все выглядело очень аккуратно, но теперь это как-то не похоже на хороший пример ООП. Хотя я и думал об этом, мне пришло в голову, что я могу как-то использовать статические члены, например, сделать int code;
статической переменной, характерной для наследующих классов. Или я мог бы сделать метод void generate();
чистой виртуальной функцией с = 0
, что было моей первой идеей.
Мой вопрос: Можно ли сделать это решение лучшим примером ООП и/или я пропущу общую точку OOD?
Это, вероятно, принадлежит на [Просмотр Кода] (http://codereview.stackexchange.com/). – 0x499602D2
Дайте вашему классу 'Exception' (возможно,' protected') конструктор, который получает значения для 'text' и' code'. Затем вызовите конструктор через список инициализаторов в производных классах. – 0x499602D2