Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138

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

06.07.2012, 14:41. Показов 1709. Ответов 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;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.07.2012, 14:41
Ответы с готовыми решениями:

Абстрактный класс CGraphicsObject, его наследник - базовый класс CPoint, и класс - наследник от CPoint
Всем доброй ночи! Очень нужна помощь и по мере возможности разъяснения на темы: абстрактный класс в задании(что он из себя представляет и...

Полиморфный метод
Здравствуйте! Мне необходимо в иерархии наследования реализовать полиморфный метод. Создать экземпляры классов и показать работу...

Полиморфный контейнер
Помогите понять, что в данном контексте значит &quot;полиморфный контейнер&quot;. Само задание очень простое.

7
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.07.2012, 15:10
Цитата Сообщение от Yacudzer Посмотреть сообщение
catch (exception &e)
C++
1
catch(const myex& e)
0
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138
06.07.2012, 15:17  [ТС]
Нет, не пойдет. В общем случае я не знаю кто из наследников кинул исключение. Для чего же полиморфизм то?
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.07.2012, 15:20
Т.е. вы хотите, чтобы родитель вызывал метод наследника, о которых он, к слову говоря, ничего не знает?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
06.07.2012, 15:41
Цитата Сообщение от Yacudzer Посмотреть сообщение
Для чего же полиморфизм то?
это у вас нужно спросить
Цитата Сообщение от Yacudzer Посмотреть сообщение
C++
1
2
3
4
virtual void what()
* * {
* * * * printf("%d : %s\n",err_code,err_txt);
* * }
std::exception внимательно смотрим на сигнатуру what()
0
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138
06.07.2012, 17:09  [ТС]
Jupiter, я пока еще только учусь Кажется понятно, что объявления должны быть одинаковые. Однако, что же происходило в моем случае? Почему не было ошибки при компиляции? И зачем throw() в конце объявления метода?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
06.07.2012, 18:04
Цитата Сообщение от 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;
}
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
06.07.2012, 21:03
Цитата Сообщение от Yacudzer Посмотреть сообщение
И зачем throw() в конце объявления метода?
В двух словах: внутри скобок обычно указываются типы исключений, которые могут сгенерироваться при вызове функции. Т.е. те типы исключений, которые в случае их возникновения необходимо обработать за пределами функции(функция за обработку этих исключений не отвечает). И наоборот, все те типы исключений, которые в списке не указаны должны обрабатываться непосредственно внутри данной функции, в противном случае программа завершится аварийно. Если список пуст, соответсвенно функция должна самостоятельно следить за обработкой всех видов исключений, которые так или иначе могут возникнуть при её вызове.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.07.2012, 21:03
Помогаю со студенческими работами здесь

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

Полиморфный массив
Как задать динамический массив из float и того, что было определено в typedef-e? typedef обычная структурка typedef struct...

Полиморфный протектор
Добрый день, я работаю над прогой, которая нуждается в хорошей защите от дебаггинга, трейсинга ит.п... И чтобы обеспечить соответствующий...

не работает полиморфный код
Изучаю Java и ООП в целом. Столкнулся с некоторой непоняткой Допустим задан интерфейс Fnc, в нем объявлен один метод public interface...

First chance exception at $77ADB09E. Exception class EAccessViolation with message 'Access Violation'. Process
Объясните в каких случаях возникает эта ошибка, из-за чего? Как справиться с этой ошибкой? Только плиз на примере и доступными словами, т....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru