Возможно, не идеальный способ, а простой, добавив функцию к родителю, которая возвращает true в родительском элементе и переопределяет его в дочернем элементе, чтобы он возвращал false
class Form {
public:
Form();
virtual ~Form() = default;
virtual void Draw(CDC* pDC)abstract;
virtual bool isParent(){ return 1;}
};
class Circle :public Form {
public:
Circle();
~Circle();
void Draw(CDC* pDC) override;
CPoint GetUpperLeft();
CPoint GetLowerRight();
bool isParent(){ return 0;}
private:
CPoint m_upperLeft;
CPoint m_lowerRight;
};
Во-вторых, обратите внимание, что если высобираясь создавать элементы при нажатии на вектор, вы должны использовать:
m_forms.emplace_back(new Circle());
, чтобы не делать лишних копий
В дополнение к этому, способ объявления вектора объектов
vector<Form> m_forms;
stores values, not references.
vector<Form*> m_forms
Or, better yet:
vector< std::shared_ptr<Form> > m_forms