简单了解C++语言中的二元运算符和赋值运算符
二元运算符
下表显示可重载的运算符的列表。
可重新定义的二进制运算符
| 运算符 | |
|---|---|
| , | 逗号 |
| != | 不相等 |
| % | 取模 |
| %= | 取模/赋值 |
| & | 按位“与” |
| && | 逻辑“与” |
| &= | 按位“与”/赋值 |
| * | 乘法 |
| *= | 乘法/赋值 |
| + | 添加 |
| += | 加法/赋值 |
| – | 减法 |
| –= | 减法/赋值 |
| < | 小于 |
| << | 左移 |
| <<= | 左移/赋值 |
| <= | 小于或等于 |
| = | 赋值 |
| == | 相等 |
| > | 大于 |
| >= | 大于或等于 |
| >> | 右移 |
| >>= | 右移/赋值 |
| ^ | 异或 |
| ^= | 异或/赋值 |
| | | 按位“与或” |
| |= | 按位“与或”/赋值 |
| || | 逻辑“或” |
若要将二元运算符函数声明为非静态成员,您必须用以下形式声明它:
ret-typeoperatorop(arg)
其中,ret-type是返回类型,op是上表中列出的运算符之一,而arg是任何类型的参数。
若要将二元运算符函数声明为全局函数,您必须用以下形式声明它:
ret-typeoperatorop(arg1,arg2)
其中,ret-type和op是成员运算符函数,而arg1和arg2是参数。至少有一个参数必须是类类型。
注意
对二元运算符的返回类型没有限制;但是,大多数用户定义的二元运算符将返回类类型或对类类型的引用。
赋值运算符
严格地说,赋值运算符(=)是二元运算符。其声明与任何其他二元运算符的相同,但有以下例外:
它必须是非静态成员函数。没有operator=可声明为非成员函数。
它不由派生类继承。
默认operator=函数可由类类型的编译器生成(如果该函数不存在)。(有关默认operator=函数的详细信息,请参阅成员赋值和初始化。)
以下示例阐释如何声明赋值运算符:
//assignment.cpp
classPoint
{
public:
Point&operator=(Point&);//Rightsideistheargument.
int_x,_y;
};
//Defineassignmentoperator.
Point&Point::operator=(Point&ptRHS)
{
_x=ptRHS._x;
_y=ptRHS._y;
return*this;//Assignmentoperatorreturnsleftside.
}
intmain()
{
}
请注意,所提供的参数是表达式的右侧。此运算符返回对象以保留赋值运算符的行为,赋值运算符在赋值完成后返回左侧的值。这使您可以编写类似于下面的语句:
pt1=pt2=pt3;