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)仍然可用。
  • 相关阅读:
    RSA
    DES
    MD5
    增删改查
    [转]数据绑定之DataFormatString
    分页通用存储过程(未验证)
    浅谈sql中的in与not in,exists与not exists的区别
    [转]order by 1是什么意思?
    bak骗子公司
    Performance Considerations for Entity Framework 4, 5, and 6
  • 原文地址:https://www.cnblogs.com/null00/p/3113434.html
Copyright © 2011-2022 走看看