我正在学习继承和多态,但我已经陷入困境。我创建了父类CElement,它存储了按钮,标签等图形元素。然后有一个CWindow类,它表示窗口并包含一些元素。我想在地图中添加新元素,但编译器说'抽象类类型的无效新表达式',我无法解决问题。我该如何插入地图?还有类CRect表示每个元素的比例,但这并不重要。谢谢。
class CElement
{
public:
size_t getID() const { return index; }
virtual void print() const = 0;
protected:
size_t index;
double rel_X, rel_Y;
double rel_W, rel_H;
};
class CWindow
{
public:
CWindow ( const string & title, const CRect & absPos )
: title(title),
abs_X(absPos.m_X),
abs_Y(absPos.m_Y),
abs_W(absPos.m_W),
abs_H(absPos.m_H) {}
CWindow & Add(const CElement & elem)
{
elems.insert(make_pair(elem.getID(), new CElement)); //error
return *this;
}
private:
string title;
double abs_X, abs_Y;
double abs_W, abs_H;
map<int, CElement*> elems;
};
class CButton : public CElement
{
public:
CButton ( int id, const CRect & relPos, const string & name )
{
index = id;
rel_X = relPos.m_X;
rel_Y = relPos.m_Y;
rel_W = relPos.m_W;
rel_H = relPos.m_H;
this->name = name;
}
void print() const { cout<<name; }
private:
string name;
};