
第三章类和对象的深入讨论 本章教学目标: >~构造函数和析构函数的定义和使用 >对象数组和对象指针 >共用数据的保护 >对象的动态建立、释放、赋值和复制 >静态成员和友元 >类模板 0
本章教学目标: ➢构造函数和析构函数的定义和使用 ➢对象数组和对象指针 ➢共用数据的保护 ➢对象的动态建立、释放、赋值和复制 ➢静态成员和友元 ➢类模板 第三章 类和对象的深入讨论 ⚫0

第五讲学习目录 3.1、构造函数 一、 为什么需要构造函数 二、 构造函数的基本概念 三、构造函数的创建作业 ●1
第五讲 学习目录 3.1、 构造函数 一、为什么需要构造函数 二、构造函数的基本概念 三、构造函数的创建作业 ⚫1

3.1构造函数 一、为什么需要构造函数 设计一个时间类Time包含三个数据 成员时、分、秒和一个成员函数di splayTime()。 并调用该函数,输出数据成员的值。 ●2
3.1 构造函数 一 、为什么需要构造函数 设计一个时间类Time包含三个数据 成员 时、分、秒 和一个成员函数 di splayTime()。 并调用该函数,输出数据成员的值。 ⚫2

无构造函数的Time类示例 #include using namespace std; ● class Time public: ● void displayTime() ● {cout<<"hour:"<<hour<<endl; cout<<"minute:"<<minute<<endl; cout<<"second:"<<second<<endl; } ● private: int hour; ● int minute; ● int second; }; ● int main() ● Timet1; th.displayTime(0月 ●} ●3
⚫ #include ⚫ using namespace std; ⚫ class Time ⚫ { public: ⚫ void displayTime() ⚫ {cout<<"hour:"<<hour<<endl; ⚫ cout<<"minute:"<<minute<<endl; ⚫ cout<<"second:"<<second<<endl; ⚫ } ⚫ private: ⚫ int hour; ⚫ int minute; ⚫ int second; ⚫ }; ⚫ int main() ⚫ { Time t1; ⚫ t1.displayTime(); ⚫ } 无构造函数的Time类示例 ⚫ 3

3.1构造函数 如何为Time类的数据成员赋初值? (1)如果一个数据成员未被赋值,则它的值是不可预知的。( 真可怕) (2)类的数据成员不能在声明类时初始化。 因为类并不是一个实体,而是一种抽象类型,并不占存储空 间,显然无处容纳数据。(此路不通) (3)如果一个类的数据成员是公用的,可以在类外进行初始化 。(但违背了数据安全性原则) (4)可以使用成员函数(如iit0等)对数据成员初始化。但用户 在主函数中必须调用它们并记住其名字。(臃肿麻烦)
(1) 如果一个数据成员未被赋值,则它的值是不可预知的。( 真可怕) (2) 类的数据成员不能在声明类时初始化。 因为类并不是一个实体,而是一种抽象类型,并不占存储空 间,显然无处容纳数据。(此路不通) (3) 如果一个类的数据成员是公用的,可以在类外进行初始化 。(但违背了数据安全性原则) (4)可以使用成员函数(如init()等)对数据成员初始化。但用户 在主函数中必须调用它们并记住其名字。(臃肿麻烦) 如何为Time类的数据成员赋初值? 3.1 构造函数 ⚫4

3.1构造函数 二、构造函数的基本概念 为了对数据成员赋初值,需要一个公有 成员函数来完成,而且应该是自动完成 -该函数就是构造函数。 构造函数的实质是说明数据成员如何 初始化! ●5
为了对数据成员赋初值,需要一个公有 成员函数来完成,而且应该是自动完成- -该函数就是构造函数。 构造函数的实质是说明数据成员如何 初始化! 二、构造函数的基本概念 3.1 构造函数 ⚫5

3.1构造函数 二、构造函数的基本概念 (1)什么是构造函数 定义了创建对象的方法,提供了初始化对象的一种简 便手段。构造函数是一个由用户定义的特殊的成员 函数。 (2)说明格式 构造函数的说明格式:([]): 例题5.1请为Time类添加构造函数 ●6
3.1 构造函数 二、构造函数的基本概念 (1) 什么是构造函数 定义了创建对象的方法,提供了初始化对象的一种简 便手段。构造函数是一个由用户定义的特殊的成员 函数。 (2) 说明格式 构造函数的说明格式: ([]); 例题5.1 请为Time类添加构造函数 ⚫6

①#include ②using namespace std; ③class Time ④{public: ⑤ void displayTime() 例题 ⑧ {cout<<"hour:"<<hour<<endl; 5.1 ⑦ cout<<"minute:"<<minute<<endl; 为 ⑧ cout<<"second:"<<second<<endl; Time ⑨ private: 类 ⑩ int hour;int minute; int second; 添加 ① ; 构造 2 Time::Time(inth,intm,int s) 函数 13{hour=h;minute=m;second=s; ④) ⑥int main0 ⑤{Timet1(0,0,0): )t1.displayTime(); ⑧}
① #include ② using namespace std; ③ class Time ④ { public: ⑤ void displayTime() ⑥ {cout<<"hour:"<<hour<<endl; ⑦ cout<<"minute:"<<minute<<endl; ⑧ cout<<"second:"<<second<<endl; } ⑨ private: ⑩ int hour; int minute; int second; ⑪ }; ⑫ Time::Time(int h,int m,int s) ⑬ { hour=h; minute=m; second=s; ⑭ } ⑮ int main() ⑯ { Time t1(0,0,0); ⑰ t1.displayTime(); ⑱ } 例题 5.1 为 Time 类 添加 构造 函数 ⚫ 7

3.1构造函数 (3)特点: ①构造函数必须与类名相同,不能是其它名字。 ②构造函数不能有任何返回类型,也没有返回值。 ®其功能是对对象进行初始化,一般由一系列赋值语句 构成。 ④ 用户不能调用构造函数,而是在定义对象时系统自动 调用。 ⑤在类定义时如果没有定义任何构造函数,则编译器自 动为类生成一个不带任何参数的默认构造函数,但函 数体中没有任何语句。如:Time0} ⑥构造函数允许重载。 ●8
(3) 特点: ① 构造函数必须与类名相同,不能是其它名字。 ② 构造函数不能有任何返回类型,也没有返回值。 ③ 其功能是对对象进行初始化,一般由一系列赋值语句 构成。 ④ 用户不能调用构造函数,而是在定义对象时系统自动 调用。 ⑤ 在类定义时如果没有定义任何构造函数,则编译器自 动为类生成一个不带任何参数的默认构造函数,但函 数体中没有任何语句。 如:Time() {} ⑥ 构造函数允许重载。 3.1 构造函数 ⚫8

3.1构造函数 课堂练习 1.在Time类的构造函数中添加输出 语句,确认构造函数何时执行: ●9
课堂练习 1. 在Time类的构造函数中添加输出 语句,确认构造函数何时执行; 3.1 构造函数 ⚫9