这篇文章对运算符的重载进行简单的总结。
1. 概念:运算符重载的本质是函数重载。
2. 格式:
返回类型 operator 运算符名称(形参列表)
{
重载实体;
}
可以把上面的 [ operator 运算符名称 ] 看作新的函数名。
3. 规则:
4. 友元重载和成员重载
大多数运算符既可以友元重载也可以成员重载,
4.1 单目运算符重载
格式:
全局函数:operator#(M);
成员函数:M.operator#()
4.1.1 -(负数)运算符重载(+正数类似)
#include
using namespace std;
class Complex{
public:
Complex(float x=0, float y=0):_x(x),_y(y) {}
void dis()
{
cout<<"("<<_x<<","<<_y<<")"<
如上述代码所示,返回值必须为const Complex,而且函数体为const类型,不能对成员变量进行更改。
4.1.2 ++运算符重载(前++,前--类似)
#include
using namespace std;
class Complex{
public:
Complex(float x=0, float y=0):_x(x),_y(y) {}
void dis(){
cout<<"("<<_x<<","<<_y<<")"<
输出结果:
4.1.3 ++运算符重载(后++,后--类似)
#include
using namespace std;
class Complex{
public:
Complex(float x=0, float y=0):_x(x),_y(y) {}
void dis(){
cout<<"("<<_x<<","<<_y<<")"<
输出结果:
4.2 双目运算符重载
格式:
全局函数:operator#(L, R);
成员函数:L.operator#(R)
4.2.1 +=运算符重载(-= 也一样)
#include
using namespace std;
class Complex{
public:
Complex(float x=0, float y=0):_x(x),_y(y) {}
void dis()
{
cout<<"("<<_x<<","<<_y<<")"<_x += c._x;
this->_y += c._y;
return *this;
}
private:
float _x;
float _y;
};
int main(){
int a = 10, b = 20,c = 30;
(a += b) += c; //作对比
cout<<"a = "<
输出结果:
如上述代码所示,与类对象的内置类型作了对比。返回引用的原因:返回的操作数还要作为左值进行操作。
4.2.2 +运算符重载(-运算符类似)
#include
using namespace std;
class Complex{
public:
Complex(float x=0, float y=0):_x(x),_y(y) {}
void dis(){
cout<<"("<<_x<<","<<_y<<")"<_x + another._x,this->_y + another._y);
}
int main()
{
//作对比
int a = 3;
int b = 4;
cout<<"a = "<
输出结果:
友元函数的实现代码:链接~
上面只是简单的列举几个作为例子,String GitHub链接 是本人写的一个String的实现。