主要演示<<,+,[]运算符的重载
这个地方涉及到不同的数据类型~就要讨论一下友元函数重载和成员函数重载的区别~
1、+运算符成员函数方式重载
#include<iostream>
using namespace std;
class Coordinate
{
public:
Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
int getX()
{
return m_iX;
}
int getY()
{
return m_iY;
}
Coordinate operator+(Coordinate &c)//引用是为了效率
{
Coordinate temp(0,0);
temp.m_iX=this->m_iX+c.m_iX;
temp.m_iY=this->m_iY+c.m_iY;
return temp;
}
private:
int m_iX;
int m_iY;
};
int main()
{
Coordinate coor1(1,3);
Coordinate coor2(2,4);
Coordinate coor3(0,0);
coor3=coor1+coor2;
cout<<coor3.getX()<<","<<coor3.getY()<<endl;
system("pause");
return 0;
}
这个使用的是成员函数的方式,与this指针有关~返回的是个暂时的变量
2、+运算符友元函数方式重载
#include<iostream>
using namespace std;
class Coordinate
{
friend Coordinate operator+(Coordinate &c1,Coordinate &c2);
public:
Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
int getX()
{
return m_iX;
}
int getY()
{
return m_iY;
}
/*
Coordinate operator+(Coordinate &c)//引用是为了效率
{
Coordinate temp(0,0);
temp.m_iX=this->m_iX+c.m_iX;
temp.m_iY=this->m_iY+c.m_iY;
return temp;
}
*/
private:
int m_iX;
int m_iY;
};
Coordinate operator+(Coordinate &c1,Coordinate &c2)
{
Coordinate temp(0,0);
temp.m_iX=c1.m_iX+c2.m_iX;
temp.m_iY=c1.m_iY+c2.m_iY;
return temp;
}
int main()
{
Coordinate coor1(1,3);
Coordinate coor2(2,4);
Coordinate coor3(0,0);
coor3=coor1+coor2;
cout<<coor3.getX()<<","<<coor3.getY()<<endl;
system("pause");
return 0;
}
3、<<运算符友元函数重载
#include<iostream>
using namespace std;
class Coordinate
{
friend Coordinate operator+(Coordinate &c1,Coordinate &c2);
friend ostream &operator<<(ostream &output,Coordinate &coor);
public:
Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
int getX()
{
return m_iX;
}
int getY()
{
return m_iY;
}
/*
Coordinate operator+(Coordinate &c)//引用是为了效率
{
Coordinate temp(0,0);
temp.m_iX=this->m_iX+c.m_iX;
temp.m_iY=this->m_iY+c.m_iY;
return temp;
}
*/
private:
int m_iX;
int m_iY;
};
Coordinate operator+(Coordinate &c1,Coordinate &c2)
{
Coordinate temp(0,0);
temp.m_iX=c1.m_iX+c2.m_iX;
temp.m_iY=c1.m_iY+c2.m_iY;
return temp;
}
ostream &operator<<(ostream &output,Coordinate &coor)
{
output<<coor.m_iX<<","<<coor.m_iY<<endl;
return output;
}
int main()
{
Coordinate coor1(1,3);
Coordinate coor2(2,4);
Coordinate coor3(0,0);
coor3=coor1+coor2;
//cout<<coor3.getX()<<","<<coor3.getY()<<endl;
cout<<coor3<<endl;
system("pause");
return 0;
}
我们可以看到两种输出方式都是一样的效果~
这种只能使用友元函数~因为成员函数返回的前一个值是自动带this指针的!而这种类型的第一个值得返回类型是ostream的没有this指针
4、【】索引类运算符重载
#include<iostream>
using namespace std;
class Coordinate
{
//friend Coordinate operator+(Coordinate &c1,Coordinate &c2);
friend ostream &operator<<(ostream &output,Coordinate &coor);
public:
Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
int getX()
{
return m_iX;
}
int getY()
{
return m_iY;
}
int operator[](int index)
{
if(0==index)
{
return m_iX;
}
if(1==index)
{
return m_iY;
}
return 0;
}
/*
Coordinate operator+(Coordinate &c)//引用是为了效率
{
Coordinate temp(0,0);
temp.m_iX=this->m_iX+c.m_iX;
temp.m_iY=this->m_iY+c.m_iY;
return temp;
}
*/
private:
int m_iX;
int m_iY;
};
/*
Coordinate operator+(Coordinate &c1,Coordinate &c2)
{
Coordinate temp(0,0);
temp.m_iX=c1.m_iX+c2.m_iX;
temp.m_iY=c1.m_iY+c2.m_iY;
return temp;
}
ostream &operator<<(ostream &output,Coordinate &coor)
{
output<<coor.m_iX<<","<<coor.m_iY<<endl;
return output;
}
*/
int main()
{
Coordinate coor1(1,3);
Coordinate coor2(2,4);
//cout<<coor3.getX()<<","<<coor3.getY()<<endl;
cout<<coor1[0]<<endl;
cout<<coor1[1]<<endl;
cout<<coor2[0]<<endl;
cout<<coor2[1]<<endl;
system("pause");
return 0;
}