C++一元运算符重载

运算符重载是给原有运算符赋予功能新的,实际上就是函数重载

一元运算符就是只对一个操作数运算

下面通过两个例子来说明

-(负号)的重载: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;

}

猜你喜欢

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