C++基础篇--运算符重载

运算符重载没有多高深复杂,但牵扯到的相关概念和语法变化不少,如果这块基石不牢固,读复杂C++代码时就只有雾里看花的份。运算符重载由来    C/C++中所有运算符(+-*/等)默认只用于基本数据类型(int floatdouble等),而对自定义的struct/class通常不适用,如:    typedef struct TIMETAG    {        int hou
摘要由CSDN通过智能技术生成

    运算符重载没有多高深复杂,但牵扯到的相关概念和语法变化不少,如果这块基石不牢固,读复杂C++代码时就只有雾里看花的份。

运算符重载由来

    C/C++中所有运算符(+-*/等)默认只用于标准数据类型(int float double等),而对自定义的struct/class通常不适用,如:

    typedef struct TIMETAG

    {

        int hours;

        int minutes;

        //int *days;   

    }duration;

    duration a,b, sum;

    a.hours =2;  a.minutes = 30;

    //days =malloc(4);  

    b.hours = 1;  b.minutes=10;

    sum = a +b;  //不成立

    直接sum=a+b是美好的愿望,但编译器事先不知道自定义结构体里有哪些成员,也不知道+号功能应该针对哪些(全部?有指针也直接加?),让编译器怎么翻译这个+号?只能自定义函数:

    duration add(duration a, duration b){

        duration sum;

        sum.hours =a.hours+b.hours;

        sum.minutes =a.minutes+b.minutes;

        //*(sum.days)=*(a.days) +*(b.days);  

        return sum;

    }

    倒是有两个操作符默认可以用于struct/class=&,如sum=a;等价于memcpy(&sum,&a, sizeof(duration));是对=号默认的运算符重载,实现了浅拷贝(相关浅拷贝、深拷贝、拷贝构造函数以及默认=号运算符重载等概念的联系与区别另文讨论),这已是编译器能力极限,它没法进一步给出其他运算符用于struct/class对象时的默认实现,如上例对sum=a+b不知怎么操作指针days③,最后还是要用户自定义函数。C++规定可用operator+()代替上例的add函数实现"+"号运算符对应的加法语义,比如对sum=a+b,编译器支持用函数”operator+()”自动替换表达式里的”+”号,使程序员能像对待标准数据一样去操作类对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值