- 结构化程序设计
- 程序 = 数据结构 + 算法
- 函数及其操作的数据结构没有直接联系
- 函数、变量之间的关系不清晰
- 面向对象程序设计
- 程序 = 类 + 类 + …
- 事物的共同特点抽取出来,形成一个数据结构
- 这类事物能够进行的行为归纳出来,形成函数,用来操作数据结构
- 把数据结构和函数捆绑在一起,形成一个类,即封装
类
- 成员变量和成员函数统称为类的成员
- 类就像带函数的结构
- 通过类定义出来的变量,称为类的实例,即对象,只包含成员变量
- 成员函数被所有对象共享
- 成员变量缺省为私有成员
- 在成员函数里,可以访问当前对象的全部属性和函数和同类其他对象的全部属性和函数
- 类的成员函数以外的地方,只能访问该对象的共有成员
- 设置私有成员的机制叫隐藏,强制对成员变量的访问通过成员函数进行
- 成员函数可以重载和带缺省参数
构造函数
- 成员函数的一种
- 名字和类名相同,可以有参数,无返回值(void 也不行)
- 用来对对象初始化,给成员变量赋初值
- 没有写构造函数时,默认生成一个无参数的空构造函数,有构造函数时不会生成
- 对象生成时自动调用构造函数,生成之后,再也不能在其上执行构造函数
- 一个类可以有多个构造函数,之间是重载的关系
- 复制构造函数
- 只有一个参数(同类对象的引用)
X::X(const X &)
- 完成两个对象的复制功能,没定义时会默认生成一个
- 起作用的情况
- 一个对象去初始化同类的另一个对象
- 某个函数的一个参数是类的对象,调用函数时,该类的复制构造函数会被调用
- 函数的返回值是对象时,返回时,复制构造函数被调用
- 对象间的赋值不会调用复制构造函数
- 只有一个参数(同类对象的引用)
- 类型转换构造函数
- 实现类型的自动转换
- 只有一个参数的构造函数且不是复制构造函数
析构函数
- ‘~’+ 类名,无参数和返回值
- 一个类最多一个析构函数
- 对象消亡时自动调用,常用来释放空间
- 缺省的析构函数什么也不做
- 生命期结束时、
delete
时、参数对象消亡时、函数返回值消亡时调用 - 先构造的后析构(一般而言)
房子建好之后(分配了存储空间),构造函数进入装修(初始化),拆除(释放存储空间)之前,析构函数来预处理