crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Задачка N5
LuckLess
  опции профиля:
сообщение 11.4.2008, 11:48
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 31
Регистрация: 10.10.2007
Пользователь №: 8

Спасибо сказали: 0 раз(а)




Репутация:   0  


встретил тут прикольный код..
АХТУНГ - КОМПИЛИРУЕМ МОЗГОМ!
class A
   {
   public:
      virtual ~A(){}
   };

class B : public A
   {
   };

class C :  public A
   {
   };

class D : public B, public C
   {
   };

void f()
   {
   throw D();
   }

int main()
   {
   try
      {
      f();
      }
   catch(const A& a)
      {
      std::cout << "Catched " << typeid(a).name() << " as A" << std::endl;
      }
   catch(const B& b)
      {
      std::cout << "Catched " << typeid(b).name() << " as B" << std::endl;
      }
   }


что будет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Andrew Selivanov
  опции профиля:
сообщение 11.4.2008, 16:38
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Цитата(archimed7592 @ 11.4.2008, 14:02) *
Цитата
archimed7592, думаю тут в другом дело...
Хде слон, которого я не приметил? :)
P.S. Проверил на студии: "as B"... МинЖВ под рукой нет.
Но больше всего порадовало, как студия перед тем как выдать "as B" выдала warning со словами, мол catch B const & перекрыт первым catch'ем, который const A & :lol:


mingw был того же мнения...
..\src\test.cpp: In function `int main()':
..\src\test.cpp:36: warning: exception of type `B' will be caught
..\src\test.cpp:32: warning: by earlier handler for `A'

Кто нибудь четко сформулировать ответ может? :) Мне на ум пришел вариант "Плюнул так как не смог выбрать один из двух экземпляров A".
Наверное можно использовать как пример виртуального наследования:
class B : virtual public A 
   {
   };

class C : virtual public A
   {
   };

Вот так будет более ожидаемый результат :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 8.3.2025, 11:04