2016-12-28 58 views
1

是的,我知道把不同的抽象类的后代进行比较是不好的基调。但我真的必须。C++比较抽象类的后代

我有这个简单的抽象类:

class Figure { 
    public: 
    virtual double Square() = 0; 
    virtual ~Figure() {}; 
} 

我想给它添加是一样的东西:

bool operator<(const Figure& other) {}; 

这将比较其后裔 - 几何图形,即Triangle, Rectangle, Octagon - 使用他们的在方法Square()中返回的区域。

这有可能以任何方式?

+8

我试图找出什么在这里阻止你。 – drescherjm

+2

你没有比较任何事物的后代。你正在比较数字。一个区域是一个数字。你可以在'Figure'中有一个虚拟的'area'方法(不知道为什么有人会把它叫做'Square'),就叫它。 –

+0

@drescherjm我在这里可能出了点问题,但是当我写'return(* this-> Square()){0};'就像我在后代类中一样,我得到''一元'*'的无效类型参数('double')“'error – COLOuRSLIDES

回答

3

从你的评论return (*this->Square() < other->Square());你的麻烦简直似乎是基本的语法。

this是一个简单的指针。所以典型的正确语法只是this->Square()。当然,因为它在成员函数中,所以this可以完全省略,只是Square()

other是一个参考,让使用点运算符,other.Square()

另一个有用的东西,你的最新的评论可能相关的,是为了让运营商<功能const,因为它没有修改它的对象被呼吁。

所以生成的代码应该是更象:

bool operator<(const Figure& other) const 
{ 
    return Square() < other.Square(); 
} 
+1

我想我现在更多地理解'this'' ...是的,我实际上已经把' - >'改成了''。 我也必须使'Square()'const像@jimvonmoon建议的那样工作。 感谢您解决问题! – COLOuRSLIDES