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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 20:48   #1
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию Обработка исключительных ситуаций

Не могу кое-что реализовать:
Класс B является производным от класса A. Определить обработчик исключительной ситуации при преобразовании указателя базового класса на производный.
У меня никак не получается, буду благодарен за помощь.
Вот мои наработки хоть и неуклюжие
Код:
//---------------------------------------------------------------------------
#include <typeinfo>
#include <iostream>
#include <conio>
#include <vcl>
#pragma hdrstop

//---------------------------------------------------------------------------
class Error{};

class A
{
    protected:
         int x;
         virtual void f() {}
    public:
         A(int x=0){this->x=x;}
         A(A &obj);
         A& operator=(A &obj);


};

A::A(A &obj)
{
    throw Error();
}

A& A::operator=(A &obj)
{
    string type = typeid(obj).name();

    if(type != "A") {
         throw Error();
    }

    this->x = obj.x;

    return *this;
}

class B: public A
{
         int y;
    public:
         B(int x=0, int y=0):A(x){this->y=y;}
};

#pragma argsused
int main(int argc, char* argv[])
{
    A *obj1,obj2;
    B obj3;

    try {
         obj1 = A(obj2);
         obj1 = A(obj3);
    }
    catch(Error) {
         cout << "You can't do this\n";
    }

    getch();
    return 0;
}
Anubys вне форума Ответить с цитированием
Старый 12.03.2012, 12:06   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Это имелось в виду?
class B;
Цитата:
class A
{
где то в теле класса:
A (B* obj)
{
throw Exception("");
}
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 12.03.2012 в 12:10.
Krok27 вне форума Ответить с цитированием
Старый 12.03.2012, 12:09   #3
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

explicit A::A(A &obj)
{
обычный конструктор копирования
}
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 12.03.2012 в 13:06.
Krok27 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключительных ситуаций Anubys C++ Builder 3 11.03.2012 20:55
Обработка исключительных ситуаций в Delphi kop Помощь студентам 0 19.11.2011 20:49
Обработка исключительных ситуаций Виктория7777 Общие вопросы Delphi 2 15.12.2010 17:28
Обработка исключительных ситуаций MeTeOpA БД в Delphi 4 17.06.2010 09:58
Обработка исключительных ситуаций Claster Общие вопросы по Java, Java SE, Kotlin 2 14.10.2009 14:24