C++ 是否可以在头文件中重载运算符(在声明类时)?
测试h:C++ 是否可以在头文件中重载运算符(在声明类时)?,c++,windows,operator-overloading,C++,Windows,Operator Overloading,测试h: 这会引起什么问题吗?如果是,将其实现到cpp文件中的正确方法是什么?如果我试图将其实现到一个cpp文件中,我会得到一个错误,即参数的数量(因为函数现在不在类中?)。我想说,对于这些琐碎的函数,这是一种理想的实现方法,因为它允许编译器内联参数,从而消除函数开销 但是你应该尽可能使函数常量化 因此: 该函数根本不修改数据成员,因此我将其标记为const。此外,参数没有更改,因此我也标记了const 如果要将其实现到单独的cpp文件中,则需要使用类名对其进行限定: 测试.h class Te
这会引起什么问题吗?如果是,将其实现到cpp文件中的正确方法是什么?如果我试图将其实现到一个cpp文件中,我会得到一个错误,即参数的数量(因为函数现在不在类中?)。我想说,对于这些琐碎的函数,这是一种理想的实现方法,因为它允许编译器内联参数,从而消除函数开销 但是你应该尽可能使函数常量化 因此: 该函数根本不修改数据成员,因此我将其标记为
const
。此外,参数没有更改,因此我也标记了const
如果要将其实现到单独的cpp
文件中,则需要使用类名对其进行限定:
测试.h
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;
}
};
测试.cpp
class Test {
private:
int value;
public:
Test();
int getValue();
void setValue(int value);
bool operator >(const Test &l) const; // declare only
};
此外,您还可以更简洁地使用以下功能:
// Qualify the name with Test::
bool Test::operator >(const Test &l) const { // be const correct!
if (value > l.value) {
return true;
}
return false;
}
从理论上讲,您应该使类对象尽可能小,并尽一切可能使用小的相关非成员函数。我怀疑您会被其中的差异所困扰,因为在类中定义的非静态成员函数总是有一个“不可见”的第一个/最后一个参数(this指针)。你可能忘了,但编译器不会
// 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;
}