【问题标题】:How to access member function without using the member.functionName syntax c++?如何在不使用 member.functionName 语法 c++ 的情况下访问成员函数?
【发布时间】:2017-02-27 04:14:39
【问题描述】:

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

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: 错误:未在此范围内声明“比较”

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

  • 你可以比较一个静态成员函数并将其命名为 Fraction::compare(a,b)
  • 你有什么问题? compare 是一个非静态成员函数,当你在非成员函数中调用它时,你需要一个实例来调用它。您想将其更改为非成员函数吗?还是静态成员函数?还是别的什么?
  • 所以你知道你要找的东西的名字:一个静态成员函数。这里有什么障碍,为什么你需要帮助弄清楚语法?
  • @Cimbali 是的,这是一个语法问题。我习惯于通过点运算符访问静态成员的 Java,当我在 C++ 中尝试它时,它给出了非常模糊的建议。现在一切都好

标签: c++ c++11 member-functions


【解决方案1】:

好吧,您可以将方法声明为静态并通过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';
}

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    相关资源
    最近更新 更多