72 对象的创建和使用.docx
- 文档编号:1632242
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:17
- 大小:30.75KB
72 对象的创建和使用.docx
《72 对象的创建和使用.docx》由会员分享,可在线阅读,更多相关《72 对象的创建和使用.docx(17页珍藏版)》请在冰点文库上搜索。
72对象的创建和使用
《7.2对象的创建和使用》
1.目标概述[3分钟]2
2.回顾[5分钟]2
3.课程知识点讲解2
3.1.什么是对象[5分钟]2
3.2.对象的定义方法[15分钟]3
3.3.对象的存储方式[5分钟]4
3.4.对象成员的引用[10分钟]4
3.5.构造函数和析构函数[20分钟]5
3.6.成员访问限定符[5分钟]6
3.7.任务解决[20分钟]6
4.精练[课后完成]7
5.小结[2分钟]8
6.技能提升[90分钟]9
7.考核点10
8.作业答案10
9.扩展练习11
10.学生问题汇总11
11.教学后记12
本节目标
⏹本节中将讲述如下主要内容:
✧对象的创建
✧对象在内存中的表示
✧构造函数与析构函数
✧访问限定符
⏹通过教学使学生掌握对象的创建和使用。
本节重点
⏹对象的创建
⏹对象在内存中的表示
⏹构造函数与析构函数
⏹访问限定符
本节难点
⏹构造函数与析构函数
授课课时
⏹4课时
教法建议
目标概述[3分钟]
本节主要讲述对象的创建和使用。
提出本节的任务。
回顾[5分钟]
回顾上一节的相关内容。
课程知识点讲解
什么是对象[5分钟]
引入:
什么是对象?
主题:
所谓的对象(Object)就是系统中用来描述事物的一个实体,它是构成系统的一个基本单位。
一个对象由一组属性和对这组属性进行操作的一组服务构成。
而对象的属性是描述对象的静态特征的数据项,服务则是描述对象的行为。
也就是每个实体都是对象。
而对象中有一些是具有相同的结构和特性的。
类是对象的抽象,而对象是类的具体实例(instance)。
这两者之间的关系同结构体和结构体变量的关系一样,先声明结构体类型,然后去定义它的结构体变量。
同一个结构体类型,可以定义多个不同的结构体变量。
C++中也是先声明一个类类型,然后用它去定义若干同类型的对象。
对象就是类类型的变量。
就好比用同一张计算机设计图,可以造出许多台计算机。
也可以说类是对象的模板。
要知道类是抽象的,是不占用内存的,而对象是具体的,占用存储空间。
对象的定义方法[15分钟]
引入:
类是结构体概念的延伸,是用户定义的数据类型。
就像可以使用结构体类型声明结构体变量一样,可以使用类声明类对象。
与定义结构体一样定义对象也有多种方法。
主题:
1.先声明类类型,然后再定义对象
C++中,在声明了类类型后,定义对象有两种形式:
第一种形式如下:
class类名对象名
//Book是已经声明的书籍类类型,定义了两个对象
classBookNovel,Magazine;
第二种形式如下:
类名对象名
BookNovel,Magazine;
上面的例子中是直接用类名来定义对象。
上述两种定义方法是等效的。
2.在声明类类型的同时定义对象
其定义的一般形式为:
Class类名
{
Private:
私用的数据和成员函数;
Public:
公用的数据和成员函数;
}对象名1,对象名2,…;
示例讲解:
示例7.2.1声明一书籍类类型,并定义两个对象。
分析与解答:
具体见P317
3.不给出类名,直接定义对象
在声明类类型时不给出类名,而其后直接定义对象。
定义的一般形式如下:
Class//无类名
{
Private:
//声明以下部分为私有的
…
Public:
//声明以下部分是公用的
…
}对象名1,对象名2,…;//定义一个或多个类对象
由于在C++程序中,类的声明和类的使用通常是分开的,类并不是只为一个程序服务,人们习惯把一些常用的功能封装成类,并放在类库中。
因此,在实际的程序开发中,一般都采用上述3种方法中的第1种方法。
对象的存储方式[5分钟]
引入:
主题:
一旦定义了结构体变量,编译器就会为每个结构体变量分配不同的存储空间。
同样用类定义的对象时,编译器也会为每一个对象分配存储空间。
如果一个类包括了属性和函数,要分别为属性和函数的编码分配存储空间。
按理说,定义了多少对象就需要分配多份相同大小的存储单元。
每个对象所占用的存储空间只是该对象的数据部分所占用的存储空间,而不包括函数代码所占用的存储空间。
示例讲解:
示例7.2.2试分别定义一个时钟类和时间结构体,并比较两种自定义类型变量所占存储空间的大小。
分析与解答:
具体见P320
对象成员的引用[10分钟]
引入:
我们会经常在程序中访问对象中的成员。
在C++中访问对象中的成员可以有3种方法。
主题:
1.使用成员运算符
成员运算符引用格式:
<对象名>.<数据成员名>//只限公有数据成员
<对象名>.<成员函数名>(<参数表>)//只限公有成员函数
其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。
2.使用指针引用
同使用指针引用结构体成员一样,也可以通过指针引用对象中的成员。
其引用格式为:
<对象指针名>-><数据成员名>//只限公有数据成员
<对象指针名>-><成员函数名>(<参数表>)//只限公有成员函数
或
(*对象指针名).<数据成员名>
(*对象指针名).<成员函数名>(<参数表>)
3.this指针引用
类的成员函数中都有一个隐含定义的特殊常量指针,就是this指针。
this指针的类型就是成员函数所属类的类型。
当调用成员函数时,它被初始化为被调用的成员函数所在的类实例。
也就是说,this是指向自已所在对象的指针。
它只能在类的成员函数中使用,且可引用所有的数据成员和成员函数。
其引用格式为:
this-><数据成员名>
this-><成员函数名>(<参数表>)
[结合实例讲述对象成员的引用]
构造函数和析构函数[20分钟]
引入:
构造函数和析构函数是类的两个特殊函数,它们都是由系统自动调用,而且都没有返回值。
主题:
1.构造函数
我们知道不能在定义类时初始化变量,而我们在定义类的对象时一般都需要有初始值。
如不对该类的对象赋初值而直接使用可能会造成程序执行错误。
在C++中提供了解决方法:
利用类的构造函来初始化类的数据成员。
构造函数是类的特殊成员函数,它与类同名,且没有返回值。
C++在创建一个对象时,会自动调用该类的“构造函数”,在构造函数中可以执行初始化成员变量的操作。
构造函数的一般定义格式为:
void<类名>(<参数表>)
{…
}
所谓重载函数,是指在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。
关于函数重载的问题,在第八章还有更详尽的论述。
示例讲解:
示例7.2.3定义时钟类构造函数,并通过简单输出显示构造函数被调用时刻。
分析与解答:
具体见P324
2.析构函数
当类的对象离开其作用域时,析构函数将被调用。
析构函数也是类的特殊成员函数。
由于析构函数能在对象释放时被自动调用,因此,其必定具有与其它成员函数不同的特征,该特征是析构函数具有特殊的函数名。
析构函数名形式为符号”~”加上类名,如~Book()、~Clock()分别是Book类和Clock类的析构函数。
析构函数不能有参数,因此它不能重载。
也就是说,类只能有唯一的析构函数。
它的作用并不是删除对象,而是在销毁对象占用内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。
示例讲解:
示例7.2.4定义时钟类析构函数,观察对象释放顺序。
分析与解答:
具体见P326
成员访问限定符[5分钟]
引入:
成员访问限定符(memberaccessspecifier),是用来声明各成员的访问属性。
主题:
C++有三种成员访问限定符:
1.公用成员(public)
被声明为公用的成员,即可以被本类中的成员函数所引用,也可以被类对象的作用域内的其他函数引用。
如示例7.2.4中Clock类定义的setTime函数就是公用成员,可以被外界调用。
2.私有成员(private)
被声明为私有的成员,只能本类中的成员函数引用,类外不能调用(除友元类例外,有关友元类的概念可参考本章的扩展阅读),对外界来说是隐蔽的。
如示例7.2.4中Clock类定义的成员变量:
nHour、nMinute和nSecond就是私有的,它们只能在本类中使用,不能被外界引用。
如果在类的定义中不指定成员的访问限定符,则系统就会默认为是私有的。
3.受保护成员(protected)
用protected声明的成员称为受保护的成员,它不能被类外访问,但可以被派生类的成员函数访问(有关派生类的知识我们将在第8章中介绍)。
任务解决[20分钟]
任务:
由上节的学习可知,我们仅仅是从HNS软件学院图书管理系统的需求中抽象出了用户类和书籍类,但是并没有实现对书籍和操作员的管理。
现指派您运用本节所学的有关对象创建和使用的知识,实现书籍和操作员和简单管理功能。
您主要的任务如下:
1.实现书籍管理中的图书新增功能;
2.实现操作员管理中的用户新增功能。
分析与解决:
具体见P329-335
精练[课后完成]
任务:
请您根据本节所学的知识编写相应的程序解决项目中的任务2。
分析:
我们知道在图书馆里的图书管理员是管理书籍和读者信息的工作人员,通常图书管理员有多个,但他们之间是有着许多相同的特性,如:
都有员工编号、姓名、年龄等等。
在使用图书管理系统时他们扮演着操作员的角色,因此,我们可以把他们抽象成类。
而系统为更方便地管理好操作员信息(Operater),需要对操作员进行新增、修改和删除操作,因此,还可以抽象成一个操作员管理类(OperaterManager)。
1.操作员信息类(Operater)
通过对图书管理系统需求的分析,可知操作员信息类的成员属性和成员函数有如下:
(1)成员属性
String
sName//操作员姓名
Int
nID//员工编号
String
sSex//性别
String
sPassword//操作员口令
Int
nAge//年龄
(2)成员函数
stringgetName()//取操作员姓名
intgetID()//取操作员编号
stringgetPassword()//取操作员口令
//设置操作员信息
voidsetOperaterInfo(stringsN,intnID,stringsSex,stringsPassword,intnAge)
voiddisplay()//显示操作员信息
boolisNull()//判别对象信息是否为空
2.操作员管理类(OperaterManager)
通过对图书管的操作员管理需求的分析,可以抽象出操作员管理类。
其成员属性和成员函数如下:
(1)成员属性
Operater
Operaters[]//操作员信息集
Int
currentID//当前登录的操作员编号
String
currentName//当前登录的操作员姓名
(2)成员函数
intfindByID(intnID)//按照操作员编号查找操作员信息
booladdOperater()//新增操作员
boolmodifOperater()//修改操作员信息
booldeleteOperater()//删除操作员
boollogin(intnID,stringsPsw)//登录系统操作
实现:
可参照演示部分编写程序,需要分别声明操作员类和操作员管理类,并编写主函数实现任务2中的要求。
注意:
操作员管理类中的修改、删除和登录操作函数可不实现。
解决:
具体见P7-2.cpp
小结[2分钟]
本节我们主要学习了如下主要内容:
1.什么是对象
对象(Object)是系统中用来描述事物的一个实体,它是构成系统的基本单位。
它是由一组属性和对这组属性进行操作的一组服务构成。
类是对象的抽象,而对象则是类的特例。
2.对象的定义方法
对象的定义就像使用结构体类型声明结构体变量一样,可以使用类声明类对象。
C++中有3种方法:
(1)先声明类类型,然后再定义对象
这种定义方法的格式如下:
class类名对象名
或:
类名对象名
(2)在声明类类型的同时定义对象
其定义的一般格式如下:
Class类名
{
Private:
私用的数据和成员函数;
Public:
公用的数据和成员函数;
}对象名1,对象名2,…;
(3)不给出类名,直接定义对象
这种方法就是在声明时不给出类名,而直接在声明类结束的位置定义类的对象。
3.对象在内存中的表示
C++在创建对象时为对象分配存储空间时,只为各对象的数据成员分配存储空间,但成员函数则选择公用函数形式。
也就是说不同对象的数据成员有多个样本,但是成员函数却只有一个公共的样本,它为该类的所有对象提供服务。
这是因为对象的数据是不同的,但它们的行为或操作是相同的,因此,为节约存储空间,对象公用成员函数。
4.对象成员的引用
一旦类的对象创建成功后,我们可以通过3种方法去引有对象的数据成员和成员函数:
(1)使用成员运算符;
(2)使用指针引用;
(3)使用this对象的默认指针引用,注意该指针只能在本类中的成员函数中有效,它是指向自身的特殊指针。
5.构造和析构函数
在类的声明时,有两个特殊的成员函数,构造函数与析构函数。
(1)构造函数
构造函数是在对象创建时,由系统自动调用的成员函数,其目的是用它对所创对象的数据成员初始化。
构造函数的函数名与类名是相同的,它没有返回值,但允许重载构造函数。
(2)析构函数
析构函数是在对象生命周期结束时,也是由系统自动调用的,其主要作用是做一些释放前的清除工作。
析构函数的函数名是在类名的前加上“~”符号形成的,同样它没有返回值。
但是析构函数是不允许重载的。
对象的释放顺序与创建顺序是相反,后创建的先释放。
即:
先构造的后析构,后构造的先析构。
技能提升[90分钟]
任务:
HNS软件学院的开发部为更好、更快地完成学院的图书管理系统,决定采用面向对象的设计方法。
通过前面几章节的学习和工作,现已初步具备运用面向对象的设计和实现的能力。
通过对图书管理系统需求的分析,发现该系统主要处理的是读者、书籍和管理员这三类对象。
通过对这三类对象的分析,可以抽象出在种类即:
书、操作员、用户,以及对这三种类对象的管理。
要实现该系统就必须构抽象出这三种类及其管理。
为此,请您对运用本章所学的有关面向对象的知识实现对书的管理,包括对书的新增、修改、删除和借还功能。
你具体任务可分解成如下:
1.抽象出书的信息类
2.抽象出书管理类
3.编写书籍管理菜单,并实现调用
分析:
任务一:
抽象书的信息类。
(类名为Book)
1.1确定书籍的信息类的成员属性
分析:
可参照本章7.1节相关内容。
1.2确定书籍信息类的成员函数
分析:
见下表。
voidsetBookInfo(stringsB,stringsA,stringsI)//设置书籍信息
boollend()//借出
boolreturnBook()//归还书籍
voiddisplayInfo()//显示书籍信息
intgetState()//取状态
boolisNull()//判别是否为空
stringgetISBN()//取书号
voidsetNull()//置空标志,用于逻辑删除
任务二:
书籍管理类(BookManage)
2.1确定书籍管理类的成员属性
Book
Books[]//图书数组
2.2确定书籍管理类的成员函数
voiddisplay();//显示所有图书信息
boollendBook(intnID);//借书函数
boolreturnBook(intnID)//归还书籍函数
booladdBook();//新增书籍函数
booldeleteBook();//删除指定书籍的函数
boolmodifyBook();//修改书籍信息函数
intfindByISBN(intnID)//查找书籍函数
任务三:
编写主函数
提示:
本任务主要是在实现两个类的声明的前提下,设计一个书籍管理菜单,并用main主函数调用完成所有书籍管理功能。
您可参照本章和前面几章的内容完成上述任务。
解决:
具体见solution-code/7-2-A1.cpp
目标:
●提高学生的表达能力,语言应用能力和自信力
●展示所完成的任务
要求:
●学生应当使用结构体完成上述任务;
●普通话应尽可能标准流畅,不得使用方言
●需要结合本章的重点进行讲解
考核点
考核点1:
对象的创建和使用
考核点2:
构造函数和析构函数
作业答案
1:
写出下面程序的运行结果,分析构造函数调用情况。
#include
classA
{
Public:
A()
{
a=b=0;
cout<<“调用了无参构造函数”< } A(intaa,intbb) { a=aa;b=bb;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 72 对象的创建和使用 对象 创建 使用