Страница 1 из 1

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

Добавлено: 04 май 2011, 06:16
tiger()
Есть такой вопрос:

как создать объект наследника внутри 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 не определен...

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

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

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

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

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