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

C++运算符号重载

2014-04-26 16:29 197 查看
代码如下

#include<stdio.h>

using namespace System;

class A

{

public:

 int a;

public:

 A (int x) ;

 A& operator = (A &x);

 A operator + (const A &x); 

};

A:: A(int x)

{

 a=x; 

}

A A::operator +(const A &x)

{

 return A(a+x.a); 

}

A&  A::operator = (A &x)

{

 a=x.a;

 return *this; 

}

int main(array<System::String ^> ^args)

{

 A a(1),b(2),c(3);

 (a=c)=b;

 printf("%d",a.a);

 while(1);

    return 0;

}

一、为什么要在运算符返回值上加引用?

如上面的代码,如果返回类型加了引用,最后的结果是2,不加的话是3,原因是添加了引用,返回的将不会是一个临时对象,临时对象只能用来赋值给其他对象,比如a=c之后如果不加引用返回的是一个临时对象,那么后面的a=b就没有意义了,因为b赋值给的是a=c之后返回的一个临时对象,临时对象在函数结束之后就被回收了,如果要把这个临时对象保存下来,通过返回引用的操作让a替代这个临时对象继续生存下去。与a公用一个空间,只要把这个临时对象的引用值传给了a,那么改变这个临时对象就是改变a的值。整个过程就是先执行a=c,返回一个临时对象,然后把b的值传给了这个临时对象,那么因为这个对象的引用传给了a,所以改变这个对象就是改变a的值。另外一个就是加引用可以防止产生拷贝构造函数和析构函数的调用,说到底其实就是为了提升效率的问题,当然不加也是不会有问题的。

 

二、为什么要在重载运算符的参数中加引用?

其实可以不加,加了完全是为了提高效率,如果加了引用,那么就不用再产生一个临时对象,由于传递引用的话修改这个变量就等于修改外面的值,所以一般加上const防止值被意外的修改

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: