перегрузка виртуальных функций

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
tiger()
Сообщения: 4
Зарегистрирован: 01 май 2011, 08:58

Есть такой вопрос:

как создать объект наследника внутри if?

у меня получается так:

Код: Выделить всё

class myClass
{
public:
         virtual void E(int a);
}

myClass_inherit1 : public myClass
{
public:
       void E(int a);
}

myClass_inherit2 : public myClass
{
public:
            void E(int a);
}

myClass* FUN (const int a)
{
if (a < 0) { myClass_inherit1 X; }
else {myClass_inherit2 X;}

return X;
}
Но так компилятор ругается что X не определен...
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Потому что область видимости X лишь внутри фигурных скобок.
И вообще, даже бы если бы у вас не было if-а, произошла бы (в конце концов) катастрофа. Т.к. вы пытаетесь создать экземпляр класса как локальный (т.е. внутри функции) объект и вернуть его (кстати, у вас тип результата ф-ии FUN описан как указатель, а return вы путаетесь сделать экземпляр класса) "наружу". По выходе из функции стек "схлопнется" и то, что вы, вроде бы вернули, на самом деле уже будет разрушено.
tiger()
Сообщения: 4
Зарегистрирован: 01 май 2011, 08:58

BBB писал(а):Потому что область видимости X лишь внутри фигурных скобок.
И вообще, даже бы если бы у вас не было if-а, произошла бы (в конце концов) катастрофа. Т.к. вы пытаетесь создать экземпляр класса как локальный (т.е. внутри функции) объект и вернуть его (кстати, у вас тип результата ф-ии FUN описан как указатель, а return вы путаетесь сделать экземпляр класса) "наружу". По выходе из функции стек "схлопнется" и то, что вы, вроде бы вернули, на самом деле уже будет разрушено.

намек понимаю.. new?)
отлично, заработало. спасибо!!!
Ответить