chapter4 类与对象
面向对象程序的特点
- 抽象(abstraction) 数据抽象与行为抽象
- 封装(encapsulation) 将抽象出的数据与行为结合成一个类,作为类的成员
- 继承(inheritance) 从一般派生出特殊,解决代码的重用
- 多态(polymorphism) 一段程序能处理多种类型对象的能力(强制多态、重载多态、类型参数化多态、包含多态)
类和对象
- 类的成员函数与数据成员
- 访问权限(public protected private注意三者区别)
- 对象是某个类的实例
类的成员函数
- 对于一般的成员函数在类内声明,类外实现
- 目的对象
- 含默认参数的成员函数
- 内联函数 隐式声明:在类内实现函数;显式声明:加入inline关键字
构造函数与析构函数
构造函数
-
作用:利用特定的值构造对象,对对象进行初始化
-
构造函数函数名与类名一致,且无返回值,通常声明为公有函数
-
默认构造函数
- 无任何构造函数则由编译器生成,数据成员存在初始值则用初始值,否则为默认方式使用未定义值
- 编译器不能为包含无默认构造函数的复合类生成默认构造函数
- 重载形式:有参(可采用列表初始化方式),无参
-
委托构造函数,即一个构造函数调用了另一个构造函数
-
复制(拷贝)构造函数,用一个已存在对象的属性初始化一个新对象,
- 系统通常含有一个默认复制构造函数
- 调用方式
class_name new_obj=old_obj
或class_name new_obj(old_obj)
- 区分深拷贝与浅拷贝
-
析构函数
- 不接受参数,用于完成对象删除前的清理工作,
- 其在对象生存期结束前调用,调用完成后对象消失,内存释放
- 系统通常也会生成一个空的默认析构函数
-
default与delete 用于显式指定使用默认或删除构造或析构函数 如删除默认构造函数
class_name()=delete;
class person{ public: person(int Nage,string Nname):age(Nage),name(Nname){};//有参构造函数,使用列表初始化 person():person(18,"JACK"){}//委托构造函数 person(person &old_person){ age=old_person.age; name=old_person.name; } ~person(){};//析构函数 private: int age; string name; };
类的组合
- 构造函数调用顺序为内嵌对象在类中出现顺序,最后调用本类的构造
- 析构函数调用顺序正好相反
- 前向引用声明