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)仍然可用。
  • 相关阅读:
    JUnit之持续集成(CI,Continuous Integration)
    Junit初级编码(二)探索JUnit核心
    《opencv学习》 之 特征检测与匹配
    opencv小问题大智慧
    opencv3.1+contrib的配置大总结(配置了两天,遇到问题无数)
    《图像处理实例》 之 透视变换
    《图像处理实例》 之 物体计数
    《图像处理实例》 之 操作规则的圆
    《电路学习第三天》 之 彩扩机项目设计
    《图像处理实例》 之 提取特殊背景的直线
  • 原文地址:https://www.cnblogs.com/null00/p/3113434.html
Copyright © 2011-2022 走看看