1. include和前置声明
- 前置声明告诉编译器有这个类的存在。当定义的类A依赖于类B,且类A中只用到类B的指针、或者类B出现在形参与返回值类型中,则只需要前置声明即可。虽然include肯定也可以,但是会减慢编译的速度。例如:
class Parent;
class Child {
private:
Parent* m_parent;
};
- include告诉编译器整个类的属性和方法。当定义的类A依赖于类B,且类A中用到类B的属性或者方法,则需要include。在很多时候,只有在具体实现中才涉及属性或方法,它应该在.cpp文件中而不该在.h头文件里。
2. 析构函数
系统默认的析构函数:
- 调用该类的析构函数
- 调用父类的析构函数
3. 类设计的三个原则
当有需要自己管理的资源(new)时,就要:
1. allocate & deallocate: 在构造函数中如果有new的资源,注意要在析构函数中手动delete释放。
2. copy constructor:如果这个类是可以拷贝的,要重写拷贝构造函数。
3. copy assignment: 还要重载=。
4. 右值与左值
- 通常等号左边,有名字、有类型的值是左值。等号右边,无名字、有值是右值。
- 左值可以取到地址。右值取不到地址。
- cpp11引入右值引用的概念,使得下面的写法正确:
int & le = 2; // False
int && re = 2; // True
有了右值引用,就可以有如下的复制构造函数的重载形式:
class RuleOfFive {
public:
RuleOfFive (const RuleOfFive & rhs) {} // 1
RuleOfFive (RuleOfFive && rhs) {} // 2
};
RuleOfFive b;
RuleOfFive e = b; // 调用1
RuleOfFive d = std::move(b); // move()把左值变为右值,调用2
5. VS注释快捷键
- 注释:先选中你要注释的代码行,按Ctrl+k再按Ctrl+c
- 取消注释:按Ctrl+k再按Ctrl+u