C ++运算符重载 - 调用函数以获取重载内的值

时间:2011-09-02 20:27:58

标签: c++ function overloading operator-keyword

有没有办法可以在C ++中调用运算符重载并在比较期间调用参数的函数?

例如:

class MyClass{
  private:
    int x;
    int y;
  public:
    MyClass(int x, int y);
    int getX();
    int getY();
    bool operator < (const MyClass &other) const {
        return (x < other.getX()); //this does not work!
        // this would work, though, if x was public:
        // return x < other.x;
    }
};

基本上,在我调用other.getX()的地方,如何让它通过一个函数返回自己的x值来与本地的x值进行比较,而不是让x公共?有没有办法做到这一点?

感谢您的帮助!

4 个答案:

答案 0 :(得分:9)

您需要使函数为const,因为您正在使用对const MyClass的引用:

int getX() const;

您可以在以下网址阅读有关const(const正确性)的使用情况:

此外,我建议你制作运营商&lt;而是一个免费的功能。

答案 1 :(得分:6)

它不起作用,因为getX()不是const函数。将其更改为:

int getX() const;

它会起作用。您也可以删除运算符参数中的const,但这通常不会被认为是好的。

答案 2 :(得分:1)

访问是每个类,而不是每个实例。您可以毫无问题地访问other.x

除此之外,你可以返回一个const引用,但它在性能方面确实没有任何区别,只是看起来很奇怪。

bool operator < (const MyClass &other) const
{
    return x < other.x;
}

答案 3 :(得分:-1)

您可以将运营商声明为班级的朋友。

编辑:我的眼睛似乎有西红柿,您的运营商是班级成员,并且已经拥有私人访问权限。你可以和它交朋友,但它是在课堂范围之外定义的。