# 对象和类 ## 访问控制 ```cpp class demo { public: // 公有接口 private: // 私有成员 protected: // 保护 }; ``` ## 作用域运算符(::) 可用于在类体外指出函数所属的类(命名空间) ## 成员函数的参数名不可与类成员相同 ## 类的六大特殊成员函数(未定义时编译器提供默认版本) ```cpp demo::demo(); // 默认构造函数 demo::~demo(); // 默认析构函数 demo::demo(const demo&); // 复制构造函数 demo& demo::operator = (const demo&); // 赋值构造函数 demo::demo(demo&&); // 移动复制构造函数 demo& demo::operator = (demo&&); // 移动赋值构造函数 ``` ## const 成员函数 适合的成员函数要尽可能用,以帮助规避错误 `void show() const;` 声明 `void demo::show() const;` 定义 表明函数不会修改调用对象 ## this指针 成员函数引用整个调用对象,可以使用 *this ## 作用域为类的常量(无法用const) 因为声明类只是描述了对象的形式,没有创建对象 + 在类中声明一个枚举 ```cpp class const_demo { private: enum {Pi = 3.1415); double s = 2*Pi; }; ``` + 使用关键字 static 与其他静态常量存储在一起 ` class demo {static const int Months=12};` ## 作用域内枚举 `enum class egg {small, large};` 使用后需要通过枚举名限定枚举量 `egg demo1 = egg::large;` 并且关闭了隐式转换的特性 explicit 禁止单个参数构造函数导致的自动类型转换