zoukankan      html  css  js  c++  java
  • C++ Primer 读书笔记 第十四章

    1. An overloaded operator must have at least one operand of class or enumeration type.

    2. Default arguments for overloaded operators are illegal, except for operator(), the function-call operator.

    3. The assignment (=), subscript ([]), call (()), and member access arrow (->) operators must be defined as members. Defining any of these operators as a nonmember function is flagged at compile time as an error.

        Like assignment, the compound-assignment operators ordinarily ought to be members of the class. Unlike assignment, they are not required to be so and the compiler will not complain if a nonmember compound-assignment operator is defined.

        Other operators that change he state of their object or that are closely tied to their given type - such as increment, decrement, and dereference - usually should be members of the class.

        Symmetric operators, such as the arithmetic, equality, relational, and bitwise operators, are best defined as ordinary nonmember functions.

    4. < 和 == 的定义应该保持一致。

    5. 定义下标操作的类,应该有两个版本:返回引用的非const成员,返回const引用的const成员。

    6. 不用为ScreenPtr类定义默认构造函数,因此,一个ScreenPtr对象将总是指向一个Screen对象,不会有未绑定的ScreenPtr,这一点和内置指针不同。

    6. Function Object

    class GT_cls {
    public:
        GT_cls(size_t val = 0) : bound(val) { }
        bool operator() (const string &s) { return s.size() >= bound; }
    private:
        std::string::size_type bound;
    };
    
    count_if(words.begin(), words.end(), GT_cls(6));
    
    count_if的原型是
    template <class InputIterator, class UnaryPredicate>
      typename iterator_traits<InputIterator>::difference_type
        count (InputIterator first, InputIterator last, UnaryPredicate pred)
    {
      typename iterator_traits<InputIterator>::difference_type ret = 0;
      while (first!=last) {
        if (pred(*first)) ++ret;
        ++first;
      }
      return ret;
    }
    
    由于类重载了()操作符,所以pred(*first)仍然可用。
  • 相关阅读:
    用python解析html--SGMLParser
    Python相对完美的URL拼接函数
    Java将视频转为缩略图--ffmpeg
    卡夫卡(kafka)
    Qt 学习之路 2
    QT的Paint 系统
    Qt的4个图像类QImage/QPixmap/QBitmap/QPicture 转
    QImage对一般图像的处理
    Hough变换-理解篇
    从零开始学习无人驾驶技术 --- 车道检测
  • 原文地址:https://www.cnblogs.com/null00/p/3113434.html
Copyright © 2011-2022 走看看