C++运算符号重载

代码如下

#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防止值被意外的修改

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值