我是靠谱客的博主 冷酷往事,最近开发中收集的这篇文章主要介绍算法训练补充c++知识点:运算符重载,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

补充c++知识点:运算符重载
  1. 由于自己重载运算符时,不明白为什么要那么做,有时会弄错,所以补一下知识点。

  2. 简介:

    运算符重载只是一种“语法上的方便”,也就是说他只是另一种函数调用的方式。其中不同之处在于函数的参数不是出现在圆括号之内,而是紧贴在一些字符旁边,这些字符我们一般认为是不可变的运算符。

    运算符的使用和普通的函数调用有两点不同。首先是语法上的不同,“调用”运算符时要把运算符放在参数之间,有时在参数之后。第二个不同是由编译器决定调用哪一个“函数”。例如,如果对参数为浮点型使用+运算符,编译器或“调用”执行浮点类型加法的函数(这种调用通常是插入内联代码,或者一段浮点处理器指令)。

    在C++中,可以定义一个处理类的新运算符。这种定义很像一个普通函数的定义,只是函数的名字由关键字operator及其后紧跟的运算符组成。差别仅此而已。他像其它函数一样也是一个函数,当编译器遇到适当的模式时,就会调用这个函数。

  3. 语法:

    定义重载的运算符就像定义函数,只是该函数的名称是operator@, 这里@表示被重载的运算符。函数参数中的参数个数取决于两个因素:

    1. 运算符是一元的(一个参数)还是二元的(两个参数)。
      1. 运算符被定义为全局函数(对于一元是一个参数,对于二元是两个参数),还是成员函数(对于一元没有参数,对于二元是一个参数——此时该类的对象用左侧参数)。
      2. 几个运算符重载的例子:
    //一元运算符重载
    const Integer& operator-(const Integer& a){//全局函数的形式
        return Integer(-a.i);
    }
    const Byte operator-() const {//成员函数的形式,写在一个对象的内部,作为成员方法
        return Byte(-this.b);
    }
    const Integer& operator++(Integer &a){//全局形式,实现++a;
        a.i++;
        return a;
    }
    const Integet& operator++(Integer &a, int){//全局形式实现a++;
        Integer before(a.i);
        a.i++;
        return before;
    }
    //二元运算符重载
    int operator<(const Integer& left, const Integer& right){//全局形式
    			return left.i < right.i;
    }
    int operatot<(const Byte& right)const{//成员方法形式,放在一个类中
        return this.b < right.b;
    }
    Byte& operator=(const Byte& right){ // 对赋值运算符的重载,其只能作为成员方法的形式进行重载。
        if(this == &right)return *this;
        this.b = right.b;
        return *this;
    }
    Integer& operator+=(Integer& left, const Integer& right){//注意对左值是非常量引用
        left.i += right.i;
        return left;
    }
    
    1. 参数和返回值:

      在上面的几个例子中,见到不同的参数传递和返回方法,它们遵守一种呵护逻辑的模式,我们在大部分情况下都应该选择这种模式:

      1. 对于任何函数参数,如果仅需要从参数中读而不改变它,默认应当作为const来引用传递它。例如普通运算符和不二运算符不会改变参数本身,所以用const来引用传递,而自增自减会改变参数本身,不能用const传递。
      2. 返回值的参数类型,取决于运算符号的具体含义(我们可以对参数和返回值做任何想做的事)。
      3. 所有赋值运算符均改变左值,所以为了方便,所有赋值运算符的返回值对于左值应该是非常量引用。
      4. 对于逻辑运算符,人们希望至少得到一个int返回值,最好是bool返回值。

最后

以上就是冷酷往事为你收集整理的算法训练补充c++知识点:运算符重载的全部内容,希望文章能够帮你解决算法训练补充c++知识点:运算符重载所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部