C++二元运算符重载

主要演示<<,+,[]运算符的重载

这个地方涉及到不同的数据类型~就要讨论一下友元函数重载和成员函数重载的区别~

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;

}

猜你喜欢

转载自blog.csdn.net/qq_40354578/article/details/88767993