C++学习:运算符重载

1.C++运算符重载的概念和原理 :

如果不做特殊处理,C++ 的 +、-、*、/ 等运算符只能用于对基本类型的常量或变量进行运算,不能用于对象之间的运算。

有时希望对象之间也能用这些运算符进行运算,以达到使程序更简洁、易懂的目的。例如,复数是可以进行四则运算的,两个复数对象相加如果能直接用+运算符完成,不是很直观和简洁吗?

利用 C++ 提供的“运算符重载”机制,赋予运算符新的功能,就能解决用+将两个复数对象相加这样的问题。

运算符重载,就是对已有的运算符赋予多重含义,使同一运算符作用于不同类型的数据时产生不同的行为。运算符重载的目的是使得 C++ 中的运算符也能够用来操作对象。

定义运算符重载函数的一般格式:
返回值类型 类名::operator重载的运算符(参数表)
{……}

operator是关键字,它与重载的运算符一起构成函数名。因函数名的特殊性,C++编译器可以将这类函数识别出来。

包含被重载的运算符的表达式会被编译成对运算符函数的调用,运算符的操作数成为函数调用时的实参,运算的结果就是函数的返回值。运算符可以被多次重载。

运算符可以被重载为全局函数,也可以被重载为成员函数。一般来说,倾向于将运算符重载为成员函数,这样能够较好地体现运算符和类的关系。

细解运算符重载:

这里我们以复数类的重载计算为例

复数类+的重载:

Complex  Complex::operator+(Complex c){
      
    //显式说明局部对象
   Complex  Temp(Real+c.Real , Image+c.Image) ;
  //注意:直接写对象c的私有成员,不用调c的公有函数处理
   return Temp ;}

C++编译器把表达式c2+c3解释为:
c2.operator+(c3) ;
函数c2.operator创建一个局部的Complex对象Temp,把出现在表达式中的两个Complex类对象c2和c3的实部之和及虚部之和暂存其内,然后把这个局部对象返回,赋给Complex类对象c(注意这里调用了拷贝构造函数生成一个无名临时对象过渡)。
如图:
在这里插入图片描述
用隐式的临时对象替换显式的对象Temp:
Complex Complex::operator+(double d){
return Complex(Real+d , Image);}//隐式说明局部对象
在return后面跟的表达式中调用的是类的构造函数,它创立了一个临时对象,返回值就是该临时对象。

使用引用类型变量作为运算符重载函数的参数,可以提高复数类型运算的效率:

Complex Complex::operator+(const Complex &c){
   
     return Complex(real+c.real , Image+c.Image) ;
}

这里采用Complex对象的引用而不是对象本身,调用时不再重新分配内存建立一个复制的对象,函数效率会更高。而在引用形式参数类型说明前加const关键字,表示被引用的实参是不可改变的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值