Например, в основной функции я хочу получить ввод пользователя. В зависимости от ввода я создам либо Прямоугольник
, либо 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 ??