您的位置:首页 > 编程语言 > C语言/C++

c++学习之操作符重载

2013-08-04 16:54 281 查看
        终于看到操作符重载了,这个单词在我的大脑里存在了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的时候,操作符计算的时候会有一个中间变量,这个中间变量的构造析构又是个什么情况呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: