C++ Primer 要点整理 Chapter 7.
this
this的类型是 ExampleClass * const,所以不能将this绑定到常量对象上。所以也就不能在常量对象上调用普通成员函数。
ExampleClass::Func(&Obj, other params…);编译器眼中对成员函数的调用。const成员函数
上一条提到this的默认类型是 ExampleClass * const,而在const成员函数中this的类型是 const ExampleClass * const。上一条中的编译器眼中函数调用就变成了以下形式。
所以常量成员函数不能改变调用他的对象的内容ExampleClass::Func(const ExampleClass * const, other params...);
如果const成员返回*this,那他返回的将是常量引用
构造函数
构造函数不能声明为const。同时类的const对象在构造函数完成初始化过程后才能取得真正的const属性。=default
Sales_data() = default;
要求编译器自动生成默认构造函数
友元
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&);
可变数据成员mutable
mutable成员永远不是const,所以对于上文的const函数的this (相当于const ExampleClass * const)mutable成员也是可变的class Screen{ mutable size_t access_ctr; ... } void Screen::some_member() const{ ++access_ctr; }
类成员名字的查找
例子typedef double Money; string bal; class Account(){ public: Money balance(){ return bal; } private: Money bal; }
在上面的例子中 Maney这个符号现在类内出现Money前的声明中查找,查找不到后用了外面的typedef。而balance的函数体实在整个类可见后被处理,所以这时候已经可以见到private里的Money bal,所以使用的是类内的bal。