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)仍然可用。
  • 相关阅读:
    排序算法比较
    直接选择排序
    静态查找表和动态查找表
    memset函数
    二叉树
    使用vue+Element的Upload+formData实现图片传到SpringBoot,再上传到fastdfs
    vue中的export与export default的区别
    人人开源
    SpringBoot注解
    大厂薪资
  • 原文地址:https://www.cnblogs.com/null00/p/3113434.html
Copyright © 2011-2022 走看看