如何在不使用 member.functionName 语法 C++ 的情况下访问成员函数?

How to access member function without using the member.functionName syntax c++?

我正在尝试访问名为 "compare" 的 Fraction class 的成员函数,它有两个参数,都是 Fraction 对象。为什么我调用比较函数的唯一方法是通过 Fraction class 的成员?例如,我有以下代码:

bool operator==(Fraction a, Fraction b) {
    if (compare(a, b) < 0) {  // this line gives an error during compilation
        // Do stuff
    }
    return true;
}

int Fraction::compare(Fraction a, Fraction b) {
    // do stuff
    return 0;
}

在调用 compare 的行给出错误,并给出以下消息:

..\fraction.cpp:107:18: error: 'compare' was not declared in this scope

如果我将该行更改为以下内容,它就会起作用。

if (a.compare(a, b) < 0) {

调用比较的唯一方法是执行 a.compare,这似乎是多余的,无论如何,a 是函数的输入参数。我知道我可以通过使运算符重载函数成为友元函数来摆脱这种情况,但我被要求将其实现为非成员函数。

有没有办法使这个函数 static 像 Java 中那样我可以调用 Fraction.compare(a, b),或者这在 C++11 中是不可能的?

提前感谢您的帮助。

好吧,您可以将方法声明为静态的并通过 operator ::
访问它 例如:

class Fraction {
public:
    static bool compare(int a, int b);
};

bool Fraction::compare(int a, int b)
{
    return a > b;
}

int main()
{
    cout << boolalpha << Fraction::compare(5, 4) << '\n';
}