如何将派生的抽象类插入到地图中?

时间:2018-04-30 21:33:26

标签: c++ inheritance polymorphism stdmap

我正在学习继承和多态,但我已经陷入困境。我创建了父类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;
};

0 个答案:

没有答案