gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:42:06 25 4
gpt4 key购买 nike

我正在尝试访问我的 Fraction 类的一个名为“compare”的成员函数,它有两个参数,都是 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: error: 'compare' was not declared in this scope

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

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

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

有没有办法让这个函数像在 Java 中一样static,我可以只调用 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';
}

关于c++ - 如何在不使用 member.functionName 语法 C++ 的情况下访问成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com