所以我有这个:
class Grup : public Shape
{
private:
std::vector<Shape *> continut;
public:
static const std::string identifier;
Grup(){};
~Grup(){
continut.clear();
};
void add(Shape *);
void remove(Shape *);
void output(std::ostream &) const;
void readFrom(std::istream &);
void moveBy(int, int);
friend std::ostream &operator<<(std::ostream &, const Grup &);
}
我想实现删除功能。 我试过这个:
void Grup::remove(Shape *s)
{
vector<Shape*>::iterator it;
it = continut.begin();
while(it!=continut.end())
{
if((*it) == s)
{
it = continut.erase(it);
}
else it++;
}
}
但==并没有给我一个真正的价值。我也尝试在每个形状上重载operator ==但结果相同。我该怎么办?
答案 0 :(得分:1)
这是比较两个Shape
对象的内存地址:
if((*it) == s) // '*it' is of type `Shape*`
它没有比较两个Shape
个对象。需要进一步取消引用才能使用为operator==
定义的Shape
。但是,有关如何处理类层次结构operator==
的讨论,请参阅What's the right way to overload operator== for a class hierarchy?。
答案 1 :(得分:0)