在向量中找到一个指向不同类的指针的类

时间:2013-04-15 13:06:22

标签: c++ oop operator-overloading

所以我有这个:

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 ==但结果相同。我该怎么办?

2 个答案:

答案 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)

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

你应该超载 operator ==

以下是一些例子:

C++ Operator Overloading Guidelines

Operator overloading