Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2015, 14:30   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Исключительные ситуации

Всем доброго дня!

Столкнулся с такой аномалией.

в блоке try создаю обьект Ana s(0);

на экран получаю ****** c < 0 вместо с == 0

в блоке try создаю обьект Ana s(100);

на экран получаю ****** c < 0 вместо с > 10

в блоке try создаю обьект Ana s(-10);

на экран получаю ****** c < 0 все окей

______________________________

скажите пожалууйста почему такой косячек с компилятором ?


Код:
#include <stdio.h>
#include <conio.h>

class Ana

{
	int x;

public:

	Ana(int c); 

	~Ana() {}
	
	int ghf() const {return x;}

	class A {};

	class B : public A {};

	class C : public B {};


};

Ana :: Ana(int c) :

x(c)

{
	if(c == 0) throw B();

	if(c < 0) throw A();

	if(c > 10) throw C();
}

int main()

{
	try

	{
		Ana s(1);

		printf("\n-------- %d\n",s.ghf());
	}

	catch (Ana :: A)

	{
		printf("\n****** c < 0\n");
	}

	catch (Ana :: B)

	{
		printf("\n****** c == 0\n");
	}

		catch (Ana :: C)

	{
		printf("\n****** c > 10\n");
	}

		getch();

		return 0;
}
RAFA91 вне форума Ответить с цитированием
Старый 05.06.2015, 15:42   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
class B: public A;
В наследник А из значит он тоже типа A.
и поэтому срабатывает первая же проверка на A.
Вар 1. переставить проверку базового типа вниз.
Вар 2. не делать наследования.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 05.06.2015, 16:03   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

имеете ввиду поменять местами catch ?

то , что ниже по уровню - - перетащить на более высокий уровень ?
RAFA91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исключительные ситуации Illya Общие вопросы C/C++ 1 07.11.2013 03:40
исключительные ситуации sven4ik Общие вопросы Delphi 5 30.05.2013 13:51
Исключительные ситуации FIIR БД в Delphi 5 19.06.2008 16:30
Исключительные ситуации FIIR Помощь студентам 1 19.06.2008 13:50
Исключительные ситуации Mickle Общие вопросы Delphi 6 07.10.2007 21:03