C++ 比较抽象 class 的后代

C++ Comparing descendants of abstract class

是的,我知道比较抽象的不同后代是不好的语气 class。但是我真的不得不。

我有这个简单的摘要class:

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

我想添加的是:

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

它将比较其后代 - 几何图形,即 Triangle, Rectangle, Octagon - 使用方法 Square() 中返回的面积。

这有可能吗?

从你的评论来看return (*this->Square() < other->Square());你的问题似乎只是基本语法。

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

other 是一个引用,因此使用点运算符作为 other.Square()

另一个可能与您的最新评论相关的有用的事情是使 operator< 函数 const 因为它不会修改它被调用的对象。

所以生成的代码应该更像:

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