有没有办法可以在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公共?有没有办法做到这一点?
感谢您的帮助!
答案 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)
您可以将运营商声明为班级的朋友。
编辑:我的眼睛似乎有西红柿,您的运营商是班级成员,并且已经拥有私人访问权限。你可以和它交朋友,但它是在课堂范围之外定义的。