zoukankan      html  css  js  c++  java
  • C++中的运算符重载

    运算符重载给c++提供了很强大的功能,使得我们可以将一个类设计得跟内置类型差不多了。

    但是运算符这种东西最大的问题就是,看起来直观,却常常隐匿了实际的函数调用过程,时常容易让人困惑。所以在google c++编码规范里面,建议直接用普通的成员

    函数而不是重载运算符。

    可以看下面的代码段:

        class Array {
        public:
          int size() const;
          float& operator[] (int index);
          // ...
        };
        int main()
        {
          Array a;
          for (int i = 0; i < a.size(); ++i)
            a[i] = 7;    // This line invokes Array::operator[](int)
          // ...
        }

    注释的那一行显得及其简洁,但实际涉及到两个函数调用operator[] 和operator=,关键是若是不看类Array的定义,你可能很难知道a[i]返回的是个什么东西:C++支持运算符重载!

    还有就是赋值运算符,这是每个类所避不开的成员函数,即使不定义也会默认生成。所以一定要记住编译器默认生成的赋值运算符的函数原型(输入参数类型,返回类型):

    class A
    {
    public:
         A& operator=(const A&a);
         A& operator=(A&& a);
    }

    其中第二个是c++11有了右值引用之后新加的。

    总之,一个务必小心的原则是:每次看到运算符,把它展开成函数!

  • 相关阅读:
    P1121 环状最大两段子段和
    无题
    cdoj 1485 柱爷搞子串 sam treap
    自然数幂和
    Gym 100341C AVL Trees NTT
    线性筛分解质因子
    codeforces 366 Ant Man dp
    UVALive 6914 Maze Mayhem 轮廓线dp
    hdu 5790 Prefix 字典树 主席树
    莫比乌斯反演个人小结
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/5065800.html
Copyright © 2011-2022 走看看