Как условно создать экземпляры различных дочерних классов?

Например, в основной функции я хочу получить ввод пользователя. В зависимости от ввода я создам либо Прямоугольник , либо Circle , которые являются дочерними классами Object . Если нет ввода (или неизвестно), я просто создам общий объект.

class Object
{ 
       public:
           Object();
           void Draw();
       private:
           ....  
};
class Rectangle:public Object
{ 
       public:
           Rectangle();
           .... //it might have some additional functions
       private:
           ....  
};

class Circle:public Object
{ 
       public:
           Circle();
           .... //it might have some additional functions
       private:
           ....  
};

основная функция:

string objType;
getline(cin, objType);

if (!objType.compare("Rectangle"))
     Rectangle obj;
else if (!objType.compare("Circle"))
     Circle obj;
else 
     Object obj;

obj.Draw();

Конечно, код приведенный выше не будет работать, потому что я не могу создать экземпляр объекта внутри оператора If. Поэтому я попробовал что-то вроде этого.

Object obj;
if (!objType.compare("Rectangle"))
    obj = Rectangle();
else if (!objType.compare("Circle"))
    obj = Circle();


obj.Draw();

Этот код будет компилироваться, но он не будет делать то, что я хочу. По какой-то причине объект был не инициирован так, как должен дочерний класс (например, я установил некоторые переменные-члены объекта, в частности вектор, по-разному в дочерних классах). Однако, когда я поставил точку останова в конструкторе дочернего класса, он действительно прошел там.

Итак, как мне поместить экземпляры объектов в качестве дочерних классов в некоторые операторы if ??

7
задан tuzzer 27 February 2012 в 02:24
поделиться