对象:属性和行为;将同一类属性和行为抽象为类
1.面向对象的基本特点:
- 抽象:将同一类对象的共同属性和行为进行概括,形成类
- 封装:
- 将抽象出的数据、代码封装到一起,视为一个整体
- 增加安全性和简化编程
- 多态:同一名称、不同功能实现方式,减少标识符个数
- 继承:在已有类的基础上进行扩展,形成新的类,有利于代码重用
2.内联成员函数:类中声明定义,类外定义inline
3.构造函数:
- 用于对类的对象初始化,在对象创建时自动调用
- 没有return语句
- 可以有形参,可以无形参
- 可以是内联函数
- 可以重载
- 可以带默认参数
- 默认构造函数:
- 没有自定义时,编译器在编译时会生成一个隐含的构造函数
- 若已定义构造函数,但仍希望生成默认构造函数,使用“=default”
4.委托构造函数
- 使用情况:形参不同
- 使用类的其他构造函数来执行初始化过程
5.复制构造函数
- 使用情况:对象的赋值,对象形参实参、返回值的传递
- 默认复制构造函数,未自定义时:编译器自动生成,一一对应赋值
- 自定义时,
- 格式为类名::类名(const 类名 &对象名),const保证原对象不被修改,参数为对象的引用
- 含有指针时,需要深拷贝,要自定义复制构造函数
- 不希望函数被复制构造:
- 声明为private
- "类名(const 类名 &对象名)=delete"
6.析构函数
- 对象生存期消亡时,自动调用析构函数,释放资源
- 默认析构函数:~类名();
- 自定义析构函数
7.类的组合
- 组合类:类中成员是已有类的对象
- 组合类的构造函数:1)初始化本类数据成员 2)初始化对象成员(其构造函数会自动调用,但需要传递初始参数)
- 类名::类名(对象成员的所需形参,本类成员所需形参):对象1(参数1),对象2(参数2)...{}
- 最好构造函数要写一个默认构造函数,避免发生组合类无法构造情况
8.前向引用声明
- 两个类相互引用时,两个声明的次序改如何决定?即用到前向引用声明
- 前向引用声明只为程序引入一个标准符,具体声明在其他地方,class B;
- 不能涉及到具体细节,包括对象
9.UML语言
- 事物、关系、图
10.结构体struct
- 默认访问属性:public
- 使用情况:保存数据,而没什么操作
- 特殊的类
11.联合体union
- 使用情况:存储空间的公用,任意两个成员不会同时有效
12.枚举类enum class
- 使用情况:作用域限制在枚举类中,使用时枚举类名::枚举值名
- 语法:enum class 枚举类型名:底层类型{枚举值列表}