深入理解 运算符的重载

本文深入探讨C++中的运算符重载,特别是作为类成员函数时的重载规则。文章通过一道例题解析了运算符“+”的重载,强调了结合性的重要性。此外,还介绍了前置和后置++运算符的重载形式,以及全局函数中运算符重载的考虑因素。
摘要由CSDN通过智能技术生成

今天看到这么一道题:

template<class T> class BigNumber{ 
    long n; 
public: 
    BigNumber(T i):n(i){}
    BigNumber operator+(BigNumber b)
    { 
        return BigNumber(n+b.n); 
    } 
};

已知b1,b2是BigNumber的两个对象,则下列表达式中错误的是?

A 3+3
B b1+3
C b1+b2
D 3+b1

题干中的意思不就是类里面重载了一个“+”法运算符么,所以:
A 是正常的算数加法操作 √
C 是调用了重载的“+”号运算符,实际执行起来就类似于这样:b1.operator+(b2) √

接下来重点是B和D哪个正确?

经过查资料,分析如下:
1、首先,题干中的重载运算符是作为类的成员函数的,作为类的成员函数时,如果被重载的运算符是二元运算符的话,运算符重载函数只需要一个参数,因为另一个参数是隐含的this指针;
2、加法运算符的结合型是自左向右,所以对于B来讲,执行时编译器发现b1是一个BigNumber的对象,就会去调用重载的“+”法运算符,类似于:b1.operator(3),此时的3被强制转化成BigNumber类型;所以C √
3、对于D,执行时,编译器首先检查“+”的左边,发现是一个普通int型变量,所以就不去调用重载的“+”法运算符函数了。但是“&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值