二刷 C++ Primer 要点整理 Chapter 7.

C++ Primer 要点整理 Chapter 7.


  1. this
    this的类型是 ExampleClass * const,所以不能将this绑定到常量对象上。所以也就不能在常量对象上调用普通成员函数。
    ExampleClass::Func(&Obj, other params…);编译器眼中对成员函数的调用。

  2. const成员函数
    上一条提到this的默认类型是 ExampleClass * const,而在const成员函数中this的类型是 const ExampleClass * const。上一条中的编译器眼中函数调用就变成了以下形式。
    所以常量成员函数不能改变调用他的对象的内容

    ExampleClass::Func(const ExampleClass * const, other params...);

    如果const成员返回*this,那他返回的将是常量引用

  3. 构造函数
    构造函数不能声明为const。同时类的const对象在构造函数完成初始化过程后才能取得真正的const属性。

  4. =default

    Sales_data() = default;

    要求编译器自动生成默认构造函数

  5. 友元

    class Sales_data{
        //函数友元
        friend Sales_data add(const Sales_data&, const Sales_data&);    
        //类友元,类Item将可以访问Sales_data成员的成员
        friend class Item;     
        //成员函数友元
        friend Item::add(para);
        ...
    }   
    
    Sales_data add(const Sales_data&, const Sales_data&);
  6. 可变数据成员mutable
    mutable成员永远不是const,所以对于上文的const函数的this (相当于const ExampleClass * const)mutable成员也是可变的

    class Screen{
        mutable size_t access_ctr;
        ...
    }
    void Screen::some_member() const{
        ++access_ctr;
    }
    
  7. 类成员名字的查找
    例子

    typedef double Money;
    string bal;
    class Account(){
        public:
            Money balance(){ return bal; }
        private:
            Money bal;
    }

    在上面的例子中 Maney这个符号现在类内出现Money前的声明中查找,查找不到后用了外面的typedef。而balance的函数体实在整个类可见后被处理,所以这时候已经可以见到private里的Money bal,所以使用的是类内的bal。

你可能感兴趣的:(C++)