Форум программистов, компьютерный форум, киберфорум
Наши страницы

Логически правильное наследование исключений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Какова оптимальная и эффективная методика изучения языка? http://www.cyberforum.ru/cpp-beginners/thread1066022.html
Здравствуйте , тема скорей всего поднималась 100500 раз но спрошу по новой, хочу узнать ваше мнение по поводу методики изучения яп. 1)Прочитать книгу и после начать подробный разбор книги. 2)Сразу...
C++ Ввести координаты вершин параллелепипедов и упорядочить их по длине диагонали на вход подается некоторое количество параллелепипедов (координаты вершин ). Отсортировать и вывести их по возрастанию диагоналей. При вводе проверять, что вводятся параллелепипеды. http://www.cyberforum.ru/cpp-beginners/thread1066020.html
C++ Параллельный запуск процессов с помощью fork(). Проверить код
Правильно ли я накидал параллельный запуск (в данном случае 10 ) процессов с помощью fork() ? if(pipe(filedes) == -1) { perror("pipe failed"); exit(EXIT_FAILURE); } for(int...
Графы: матрицы соединений и матрицы связей C++
Графом называется совокупность точек ( узлов), некоторые из которых соединены между собой направленными ребрами. Граф , состоящий из n узлов можно описать двумя матрицами порядка n : матрицей...
C++ Найти среди простых чисел, попадающих в этот промежуток, такое число, у которого сумма цифр максимальная http://www.cyberforum.ru/cpp-beginners/thread1066006.html
1.В функцию передаются границы числового интревала. Найти среди простых чисел, попадающих в этот промежуток, такое число, у которого сумма цифр максимальная. 2. Считать строку и вывести на экран...
C++ Одна программа записывает данные в файл, а другая их считывает и выводит на экран Задача состоит в том чтоб одна программа записала данные в файл а другая их считала и вывела на экран как полагается, запись и считывание через бинарный режим должны осуществляться. Имеется класс... подробнее

Показать сообщение отдельно
Rengen
3 / 3 / 0
Регистрация: 15.01.2012
Сообщений: 67

Логически правильное наследование исключений - C++

08.01.2014, 20:15. Просмотров 353. Ответов 8
Метки (Все метки)

Как логически правильно наследовать исключения? Пока не сталкивался с необходимостью наследовать исключения, но все же бывает в первый раз, и нужно быть готовым. Я покажу на примере стека что можно было бы отнаследовать, а уж более опытные меня поправят. Самому мне то, что и как я наследую не шибко нравится, ибо как-то глупо и не гибко выходит, но ничего лучше не видел или не правильно понял то, что видел.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class StackEx : public exception
{
public:
    StackEx(const char* Message = "Stack exception occurred!\n");
    virtual ~StackEx();
    const char* what();
protected:
    string Message;
};
 
class BadPop : public StackEx
{
public:
    BadPop(const char* Message  = "Bad pop exception occurred!\n");
    virtual ~BadPop();
    const char* what();
};
 
class BadPush : public StackEx
{
public:
    BadPush(const char* Message  = "Bad push exception occurred!\n", const int StackSize = -1);
    virtual ~BadPush();
    const char* what();
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
StackEx::StackEx(const char* Message) : exception(Message)
{
    this->Message = Message;
}
 
StackEx::~StackEx()
{
 
}
 
const char* StackEx::what()
{
    return Message.c_str();
}
 
BadPop::BadPop(const char* Message) : StackEx(Message)
{
 
}
 
BadPop::~BadPop()
{
 
}
 
const char* BadPop::what()
{
    return Message.c_str();
}
 
BadPush::BadPush(const char* Message, const int StackSize) : StackEx(Message)
{
        if(StackSize != -1)
        this->Message += "Stack size: " + to_string(static_cast<unsigned long long>(StackSize)) + "\n";
}
 
BadPush::~BadPush()
{
 
}
 
const char* BadPush::what()
{
    return Message.c_str();
}
Наверно будет лучше если кто-то сможет привести пример тех случаев когда действительно нужно наследование исключения, и при том грамотно выполненное наследование. Ибо я сейчас не понимаю, почему бы тогда не взять обычный exception и не толкать в него строку вроде "Здесь рухнул стек", "А здесь база данных пентагона".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.