Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 121
#1

Полиморфный наследник от exception - C++

06.07.2012, 14:41. Просмотров 689. Ответов 7
Метки нет (Все метки)

Добрый день.
Подскажите как корректно перехватить наследника от exception??
В приведенном ниже коде виртуальный переопределенный метод 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
#include <iostream>
 
using namespace std;
 
class myex : public exception
{
protected:
    char err_txt[200];
    int err_code;
public:
    myex(int a,const char*b)
    {
        strcpy_s(err_txt,b);
        err_code=a;
    }
    virtual void what()
    {
        printf("%d : %s\n",err_code,err_txt);
    }
};
 
int main (void) {
    setlocale(LC_ALL,"RUSSIAN");
    try
    {
        throw myex(1,"aa");
    } catch (exception &e)
    {
        e.what();
        return 1;
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2012, 14:41     Полиморфный наследник от exception
Посмотрите здесь:

Полиморфный конструктор [C++] - C++
Добрый день форумчане! Помогите разобраться, что такое полиморфный конструктор. На рсдн нашел про класс(в себе должен содержать виртуальную...

Полиморфный multimap в Windows Forms - C++
Сказали сделать вот такую лабу. Контейнер должен работать с числами, строками и структурами(это ключи). #include &quot;map&quot; #include...

На базе набора функций создать полиморфный класс - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;windows.h&gt; #include &lt;iomanip&gt; using namespace std; bool done = 0; ...

Создать полиморфный объект и продемонстрировать работу функций - C++
Есть классы: class A { public: virtual void f() {} }; class B : public A { public: void f() {

класс наследник - C++
Добрый день! Интересует вопрос отношения между parent-классом и child'ом. Допустим в protected parent класса описаны какие-то методы, а...

Наследник не унаследовал поле ? - C++
Есть следующий код : class Parent { public: Parent():str(&quot;Parent&quot;) {} ~Parent(){} string name; };

Перегрузка операций. Предок/наследник. - C++
Доброго времени суток. Есть проблема в коде, в общем не запускается у меня программа, просьба посмотреть и по возможности исправить (код...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.07.2012, 15:10     Полиморфный наследник от exception #2
Цитата Сообщение от Yacudzer Посмотреть сообщение
catch (exception &e)
C++
1
catch(const myex& e)
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 121
06.07.2012, 15:17  [ТС]     Полиморфный наследник от exception #3
Нет, не пойдет. В общем случае я не знаю кто из наследников кинул исключение. Для чего же полиморфизм то?
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.07.2012, 15:20     Полиморфный наследник от exception #4
Т.е. вы хотите, чтобы родитель вызывал метод наследника, о которых он, к слову говоря, ничего не знает?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.07.2012, 15:41     Полиморфный наследник от exception #5
Цитата Сообщение от Yacudzer Посмотреть сообщение
Для чего же полиморфизм то?
это у вас нужно спросить
Цитата Сообщение от Yacudzer Посмотреть сообщение
C++
1
2
3
4
virtual void what()
* * {
* * * * printf("%d : %s\n",err_code,err_txt);
* * }
std::exception внимательно смотрим на сигнатуру what()
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 121
06.07.2012, 17:09  [ТС]     Полиморфный наследник от exception #6
Jupiter, я пока еще только учусь Кажется понятно, что объявления должны быть одинаковые. Однако, что же происходило в моем случае? Почему не было ошибки при компиляции? И зачем throw() в конце объявления метода?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.07.2012, 18:04     Полиморфный наследник от exception #7
Цитата Сообщение от Yacudzer Посмотреть сообщение
Однако, что же происходило в моем случае? Почему не было ошибки при компиляции?
потому что ошибки нет, вы просто в наследнике создали новый метод
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
#include <exception>
#include <iostream>
#include <cstring>
 
class myex : public std::exception
{
protected:
    char err_txt[200];
    int err_code;
public:
    myex(int a, const char*b)
    {
        std::strncpy(err_txt, b, 199);
        err_txt[199] = 0;
        err_code = a;
    }
    
    const char* what() const throw() 
    {
       static char buf[220]; 
       std::sprintf(buf, "%d : %s\n", err_code, err_txt);
       return buf; 
    }
};
 
int main() 
{
    try
    {
       throw myex(1,"aa");
    } 
    catch (std::exception const& e)
    {
        std::cout << e.what();
        return 1;
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2012, 21:03     Полиморфный наследник от exception
Еще ссылки по теме:

Написать класс и его наследник - C++
Создать класс, описывающий квадратное уравнение. Определить, сколько корней имеет уравнение. Создать класс наследник, дополнительно...

Наследник класса, переопределение функции - C++
Доброго времени суток! Есть не виртуальный класс, от него необходимо наследоваться и перегрузить одну из функций. Входные параметры будут...

Как передать в переменную класс-наследник? - C++
Есть главный класс куда я отправляю класс-контроллер class DrawBase { private: Controller* controllerClass; public: void...

Базовый класс - текстовый файл и наследник... - C++
А)Базовый класс Б)Класс наследник А) Текстовый файл, поддерживающий все стандартные файловые функции Паскаля. Возможно чтение и...

класс наследник на основе базового класса - C++
-----


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
06.07.2012, 21:03     Полиморфный наследник от exception #8
Цитата Сообщение от Yacudzer Посмотреть сообщение
И зачем throw() в конце объявления метода?
В двух словах: внутри скобок обычно указываются типы исключений, которые могут сгенерироваться при вызове функции. Т.е. те типы исключений, которые в случае их возникновения необходимо обработать за пределами функции(функция за обработку этих исключений не отвечает). И наоборот, все те типы исключений, которые в списке не указаны должны обрабатываться непосредственно внутри данной функции, в противном случае программа завершится аварийно. Если список пуст, соответсвенно функция должна самостоятельно следить за обработкой всех видов исключений, которые так или иначе могут возникнуть при её вызове.
Yandex
Объявления
06.07.2012, 21:03     Полиморфный наследник от exception
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru