C++运算符重载之=,+=,-=,*=,/=

运算符+,-,*,/的重载icon-default.png?t=LBL2https://blog.csdn.net/qq_58665528/article/details/122413141

有了上节的思考,我们再来想想运算符=的重载

1.  对于a = b(a.operator(b))我们不希望b的值被改变,所以参数b一定有const修饰,接着为了减少空间开销,提高运行效率,用引用要比创建一个新的Point对象要好的多,所以参数的类型为const Point&

2. 对于a = b = c(a.operator(b.operator(c)))这种连续赋值的行为我们是允许的,所以返回值类型首先要是Point,其次由于=左边的变量本就是要求被改动的,所以我们为了减少开销,提高效率,就返回左边变量的引用就行了,所以返回值类型为Point&

得出:Point& operator=(const Point& point)

class Point {
private:
	int m_xPosition;
	int m_yPosition;

public:
	Point(int xPosition = 0, int yPosition = 0);    //构造函数 声明
	Point& operator=(const Point& const);			//重载运算符=  声明

};

//构造函数  定义
Point::Point(int xPosition, int yPosition)
	: m_xPosition(xPosition), m_yPosition(yPosition) {}

//重载运算符=  定义
Point& Point::operator=(const Point& point) {
	this->m_xPosition = point.m_xPosition;
	this->m_yPosition = point.m_yPosition;

	return *this;
}

 根据上面的思考可得,+=,-=,*=,/=也是一个道理

class Point {
private:
	int m_xPosition;
	int m_yPosition;

public:
	Point(int xPosition = 0, int yPosition = 0);    //构造函数 声明
	Point& operator=(const Point& point);			//重载运算符=  声明
	Point& operator+=(const Point& point);			//重载运算符+= 声明
	Point& operator-=(const Point& point);			//重载运算符-= 声明
	Point& operator*=(const Point& point);			//重载运算符*= 声明
	Point& operator/=(const Point& point);			//重载运算符/= 声明

};

//构造函数  定义
Point::Point(int xPosition, int yPosition)
	: m_xPosition(xPosition), m_yPosition(yPosition) {}

//重载运算符=  定义
Point& Point::operator=(const Point& point) {
	this->m_xPosition = point.m_xPosition;
	this->m_yPosition = point.m_yPosition;

	return *this;
}

//重载运算符+= 定义
Point& Point::operator+=(const Point& point) {
	this->m_xPosition += point.m_xPosition;
	this->m_yPosition += point.m_yPosition;

	return *this;
}

//重载运算符-= 定义
Point& Point::operator-=(const Point& point) {
	this->m_xPosition -= point.m_xPosition;
	this->m_yPosition -= point.m_yPosition;

	return *this;
}

//重载运算符*= 定义
Point& Point::operator*=(const Point& point) {
	this->m_xPosition *= point.m_xPosition;
	this->m_yPosition *= point.m_yPosition;

	return *this;
}

//重载运算符/= 定义
Point& Point::operator/=(const Point& point) {
	if (point.m_xPosition != 0 || point.m_yPosition != 0) {
		this->m_xPosition /= point.m_xPosition;
		this->m_yPosition /= point.m_yPosition;
	}

	return *this;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值