C++ 重载运算符+;课堂上
假设我有一个班号C++ 重载运算符+;课堂上,c++,operator-overloading,C++,Operator Overloading,假设我有一个班号 class Number { public: int numb; Number (int g) { numb = g; } int operator+(int h) { return this->numb+h; } }; 当我尝试使用重载运算符时 cout << 3 + s; // doesn't work cout << s + 3; cout只需在类
class Number
{
public:
int numb;
Number (int g)
{
numb = g;
}
int operator+(int h)
{
return this->numb+h;
}
};
当我尝试使用重载运算符时
cout << 3 + s; // doesn't work
cout << s + 3;
cout只需在类外编写一个运算符,调用类中的运算符即可
template<typename T> T operator+(T a, Number& n)
{
return n+a;
}
模板T运算符+(T a、编号和n)
{
返回n+a;
}
最简单的方法:在类外编写另一个重载
class Number
{
public:
int numb;
Number (int g)
{
numb = g;
}
int operator+(int h)
{
return this->numb+h;
}
};
int operator+(int h, Number& n)
{
return n.numb+h;
}
int main()
{
int s = 42;
std::cout << 3 + s;
std::cout << s + 3;
}
当然,我可以在类外编写带有2个参数的运算符+,但我希望在类中重载运算符
这就像说“当然我可以用锤子敲入我的指甲,但我想用螺丝刀……”
其他一些解决方案建议同时使用成员和非成员,但这是多余的:如果添加非成员,则不再需要该成员
重载运算符+
的方法是使用非成员:
Number operator+(Number a, Number b)
{
return a.numb + b.numb;
}
编写此代码的另一种方法是使用操作符+=
作为助手(这样您的类也将支持+=
):
具有成员功能:
Number &operator+=(Number b)
{
numb += b.numb;
return *this;
}
您可以选择使用operator+
返回Number
或int
你的朋友并不总是暴露在公众面前,建立友谊可能不是最好的方式。
Number operator+(Number a, Number b)
{
return a += b;
}
Number &operator+=(Number b)
{
numb += b.numb;
return *this;
}