Например, в основной функции я хочу получить ввод пользователя.В зависимости от ввода я создам Rectangle
или 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();
Этот код будет компилироваться, но он не будет делать то, что я хочу.По какой-то причине объект не был инициирован так, как должен делать дочерний класс (например, я установил переменные-члены некоторых объектов, в частности вектор, по-разному в дочерних классах).Тем не менее, когда я поставил точку останова в конструкторе класса Child, он все же прошел через него.
Так, как я должен поместить экземпляры Objects как дочерние классы в некоторые операторы if ??