Test.h:
class Test {
private:
int value;
public:
Test();
int getValue();
void setValue(int value);
bool operator >(Test &l) {
if (value > l.value) {
return true;
}
return false;
}
};
这会导致任何问题吗?如果是,将它实现到cpp文件的正确方法是什么?如果我试图将它实现为一个cpp文件,我会收到一个错误,说明参数的数量(因为该函数现在不在类中?)。
答案 0 :(得分:5)
我说这些简单的函数这是理想的方法,因为它允许编译器内联它们,从而消除了函数开销。
但你应该尽可能使函数 const 。
所以:
class Test {
private:
int value;
public:
Test();
int getValue();
void setValue(int value);
bool operator >(const Test &l) const { // be const correct!
if (value > l.value) {
return true;
}
return false;
}
};
该功能根本不会修改数据成员,因此我将其标记为const
。此外,参数不会更改,因此我也标记了const
。
如果你做想要将它实现到一个单独的cpp
文件中,那么你需要用类名限定它:
<强> Test.h 强>
class Test {
private:
int value;
public:
Test();
int getValue();
void setValue(int value);
bool operator >(const Test &l) const; // declare only
};
<强> Test.cpp的强>
// Qualify the name with Test::
bool Test::operator >(const Test &l) const { // be const correct!
if (value > l.value) {
return true;
}
return false;
}
此外,您还可以使用以下功能简洁:
// Qualify the name with Test::
bool Test::operator >(const Test &l) const { // be const correct!
return value > l.value;
}
答案 1 :(得分:0)
理论上,您应该使类对象尽可能小,并且可以在小型相关的非成员函数中执行所有操作。我怀疑你被叮咬的区别在于,在一个类中定义的非静态成员函数总是有一个'不可见'的第一个/最后一个参数(this指针)。你可能会忘记,但编译器不会......