如何在不使用 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';
}
我正在尝试访问名为 "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';
}