0

所以我有这个:

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++;

}
}

但是 == 并没有给我一个真正的价值。我还尝试在每个形状上重载运算符 == 但结果相同。我能做些什么?

4

2 回答 2

1

这是比较两个Shape对象的内存地址:

if((*it) == s) // '*it' is of type `Shape*`

它不是比较两个Shape对象。需要进一步取消引用才能使用operator==defined for Shape。但是,请参阅为类层次结构重载 operator== 的正确方法是什么?有关如何处理operator==类层次结构的讨论。

于 2013-04-15T13:11:03.527 回答
0

您正在比较形状指针地址,它们是不同的。

你应该重载运算符 ==

这里有些例子:

C++ 运算符重载指南

运算符重载

于 2013-04-15T13:14:29.737 回答