c++学习之操作符重载

        终于看到操作符重载了,这个单词在我的大脑里存在了10年,但是我一直没搞明白是个什么意思,java里面根本没有操作符重载一说,大学的时候也没好好学,今天就好好研究研究。

        操作符重载,和函数重载是一个道理,就是说一个操作符可以根据需要,我们自己定义它的算法。在c++语言支持的范围里面,操作符都仅支持基本类型的计算。如果要让操作符支持我们自己定义的类运算,就需要使用操作符重载了。

        来看看吧,我们上一节的例子中,定义了Rectangle类,里面有两个变量。如果要定义两个Rectangle类的加法,肿么办?先看看操作符重载的基本定义方法吧。

               type operator sign (parameters);

               type:就是返回的类型。计算了右值,就需要有个左值来实现赋值计算呀。

               operator :表示的是操作符的意思,定义的时候,用这个表示我们要进行操作符重载啦。

               sign:表示要重载的操作符。比如+,-,*,/等。

               parameters:表示参与操作的另外一方。

        上面这个解释我尽量用了比较简单的说明,但是如果没有例子,还是很抽象,我这里就写一个Rectangle相加的例子吧。看代码,将上个例子的Rectangle的类定义改为如下的:

class Rectangle
{
private:
	int x;
	int y;
public:
	Rectangle(int,int);
	
	~Rectangle();
	int area();
	Rectangle operator + (Rectangle);
	int getX(){return x;}
	int getY(){return y;}
	void setX(int a){x = a;}
	void setY(int b){y = b;}
};

        其中Rectangle operator +(Rectangle)就是要定义两个Rectangle对象相加,需要使用操作符+号对其进行重载。

        看看实现吧。

Rectangle::Rectangle(int a,int b)
{
	cout << "Rectangle construct..." << endl;
	x = a;
	y = b;
}

Rectangle Rectangle::operator +(Rectangle re)
{
	Rectangle temp(0,0);
	temp.setX(x+re.getX());
	temp.setY(y+re.getY());
	return temp;
}

int Rectangle::area()
{
	return x*y;
}

Rectangle::~Rectangle()
{
	cout << "Rectangle deconstruct.." << endl;
}

        在操作符重载的实现里面,我们定义了一个临时变量来保存两个Rectangle对象相加的结果。最后返回。

        这里有一个问题,我目前没有想清楚,当两个Rectangle相加的时候,这个temp对象是什么时候构造和析构的。请过路的高手指示一下。

        写了一个测试main方法:

int main()
{
	Rectangle r(5,6);
	Rectangle rect(3,4);
	cout << "r's size is :" << r.area() << endl;
	cout << "rect's size is: " << rect.area() << endl;
	Rectangle sum = r + rect;
	cout << sum.area() << endl;
	return 0;
}
        计算结果如下:

                     

        将两个Rectangle对象的x相加,y相加,然后乘积,(5+3)*(6+4)=80。和程序计算出来结果一样。

        同时,这里我们在代码中使用r+rect的时候,操作符计算的时候会有一个中间变量,这个中间变量的构造析构又是个什么情况呢?



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值