运算符重载是给原有运算符赋予功能新的,实际上就是函数重载
一元运算符就是只对一个操作数运算
下面通过两个例子来说明
-(负号)的重载:1、友元函数重载 2、成员函数重载
++符号的重载(++也是一元运算符):3、前置++重载 4、后置++重载
关键字是:operator
1、友元函数重载
#include<iostream>
using namespace std;
class Coordinate
{
friend Coordinate &operator-(Coordinate &c);//引用是为了效率
public:
Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
int getX()
{
return m_iX;
}
int getY()
{
return m_iY;
}
private:
int m_iX;
int m_iY;
};
Coordinate &operator-(Coordinate &c)
{
c.m_iX=-c.m_iX;
c.m_iY=-c.m_iY;
return c;
}
int main()
{
Coordinate coor1(1,3);
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
-coor1;
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
system("pause");
return 0;
}
2、成员函数重载
#include<iostream>
using namespace std;
class Coordinate
{
public:
Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
Coordinate &operator-()
{
m_iX=-m_iX;
this->m_iY=-this->m_iY;
return *this;
}//引用保证了是对数据本身的操作
int getX()
{
return m_iX;
}
int getY()
{
return m_iY;
}
private:
int m_iX;
int m_iY;
};
int main()
{
Coordinate coor1(1,3);
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
-coor1;
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
system("pause");
return 0;
}
3、前置++重载
#include<iostream>
using namespace std;
class Coordinate
{
//friend Coordinate &operator++(Coordinate &c);//引用是为了效率
public:
Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
Coordinate &operator++()
{
m_iX++;
m_iY++;
return *this;
}
int getX()
{
return m_iX;
}
int getY()
{
return m_iY;
}
private:
int m_iX;
int m_iY;
};
int main()
{
Coordinate coor1(1,3);
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
++coor1;
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
system("pause");
return 0;
}
4、后置++重载
#include<iostream>
using namespace std;
class Coordinate
{
public:
Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
Coordinate operator++(int)//成员函数重载,规定:后置++重载时,为和前置++区分,参数须写上int,或int val(变量名不固定)
{
Coordinate old(*this);//临时成员
this->m_iX++;
this->m_iY++;
return *this;
}
int getX()
{
return m_iX;
}
int getY()
{
return m_iY;
}
private:
int m_iX;
int m_iY;
};
int main()
{
Coordinate coor1(1,3);
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
cout<<(coor1++).getX()<<","<<coor1.getX()<<","<<coor1.getY()<<endl;
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
cout<<(coor1++).getY()<<endl;
cout<<coor1.getX()<<","<<coor1.getY()<<endl;
system("pause");
return 0;
}