2022年c教案第三章类与对象_第1页
2022年c教案第三章类与对象_第2页
2022年c教案第三章类与对象_第3页
2022年c教案第三章类与对象_第4页
2022年c教案第三章类与对象_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、长 春 工 业 大 学 课 程 教 案讲 稿 用 纸讲授内容教学设计备注第 4 章 类和对象学习目的把握类的基础学问 把握如何使用对象 把握构造函数和析构函数把握内联成员函数 把握类的组合学习要点类的特点、类的声明、类作用域、类成员函数设计 类成员的拜访权限 对象的定义方法 对象的数据成员拜访方法 对象的成员函数调用方法 类对象的储备空间 构造函数特点及设计方法 析构函数特点及设计方法对象的生存期 对象的浅复制与深复制 类的组合4.1 类4.1.1 类的声明类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关 的运算封装在一起的集合体;类将一些数据及与数据相关的函数封装在一7 起,使类

2、中的数据得到很好的 类的定义格式:“爱护”;在大型程序中不会被随便修改;class 类名 /类界面private : 数据成员和成员函数;public : 数据成员和成员函数;protected: 数据成员和成员函数;1、类具有封装性,并且类只是定义了 一种结构(样板) ,所以类中的任何成 员数据均不能使用 关键字 extern,auto 或 register 限定其 储备类型;; 2、在定义类时,只 是定义了一种导出 的数据类型,并不 为 类 分 配 存 储 空 间;所以,在定义 类 中 的 数 据 成 员 时,不能对其初始 化;如:class Test 各个成员函数的实现;/类实现用关键字

3、 priviate 限定的成员称为私有成员,对私有成员限定在该类 的内部使用,即只答应当类中的成员函数使用私有的数据成员,对于私有 的成员函数,只能被该类内的成员函数调用;类就相当于私有成员的作用域;假如未加说明,类中成员默认的拜访权限是private,即私有的;用关键字 public 限定的成员称为公有成员,公有成员的数据或函数不 受类的限制,可以在类内或类外自由使用;对类而言是透亮的;用关键字 protected所限定的成员称为爱护成员, 只答应在类内及该类int x=5,y=6; /是不答应的extern float x; /是不答应的 的派生类中使用爱护的数据或函数;即爱护成员的作用域

4、是该类及该类的派生类;类内函数私有成员公有成员爱护成员可以调用可以调用可以调用类外函数不行调用可以调用不行调用私有函数公有函数爱护函数类内函数可以调用可以调用可以调用类外函数不行调用可以调用不行调用每一个限制词 private 等在类体中可使用多次;一旦使用了限制词,该限制词始终有效,直到下一个限制词开头为止;8 4.1.2 成员函数 类中的成员函数可类的成员函数描述的是类的行为或操作;假如在类的内部定义成员函数的详细实现,就该成员函数为内联成员以调用类外定义的 一般函数;函数;在类外部实现的成员函数中,对编译提出内联要求,成员函数定义 前面加 inline;假如在类的外部定义成员函数的详细实

5、现,函数的原型声明在类的主体中,原型说明白函数的参数表和返回值类型,而函数的详细实现写在类 声明之外;在类的外部定义成员函数的语法形式为:返回值类型 类名 :成员函数名 参数表 函数体 4.2 对象在定义类时,只是定义了一种数据类型,即说明程序中可能会显现该 类型的数据,并不为类安排储备空间;只有在定义了属于类的变量后,系 统才会为类的变量安排空间;类的变量我们称之为对象;对象是类的实例,定义对象之前,肯定要 先说明该对象的类;不同对象占据内存中的不同区域,它们所储存的数据 各不相同,但对成员数据进行操作的成员函数的程序代码均是一样的;4.2.1 对象的定义格式类名 对象名表;在建立对象时,只

6、为对象安排用于储存数据成员的内存空间,而成员 函数的代码为该类的每一个对象所共享;定义一个对象和定义一个一般变量相同;定义变量时要安排储备空间,同样,定义一个对象时要安排储备空 间,一个对象所占的内存空间是类的数据成员所占的空间总和;类 的成员函数存放在代码区,不占内存空间;9 4.2.2 对象的使用一个对象的成员就是该对象的类所定义的成员,有数据成员和成员函 数,引用时同结构体变量类似,用“.”运算符;用成员挑选运算符 “.”只能拜访对象的公有成员, 而不能拜访对象的私 有成员或爱护成员;如要拜访对象的私有的数据成员,只能通过对象的公 有成员函数来猎取;调用成员形式:对象名 .成员 ; 4.

7、2.3 对象的储备空间假如类中没有任何C+只为每一个对象的数据成员安排内存空间,类中的全部成员函数 只生成一个副本,而该类的每个对象执行相同的函数成员副本;类的全部数据成员, size为1,确保不同对象有 不同的地址;数据储备对齐方式 就以两两之间的最成员函数均放在公用区中(只储存一份),每个函数代码有一个地址,类的每个对象中只存放自己的数据成员值和指向公共区中对应函数的地址,即类的成员函数是共享的;大字节对齐,比如 char 与 int 以 4 字4.2.4例题节对齐,占用了一个 8 字节空间;1.设计一个日期类 Date,包括年、月、日等私有数据成员,要求实现对日 期的设置及输出显示; (

8、显示格式为“ 月 -日-年” )#include using namespace std; class Date public: void setDateint y,int m,int d; void showDate; private: int year,month,day; ; void Date:setDateint y,int m,int d year=y; month=m; day=d; 10 void Date:showDate coutmonth-day-yearendl; int main Date D; int year,month,day; coutyearmonthday

9、; D.setDateyear,month,day; D.showDate; return 0; 2. 设计一个同学类 Student ,包括同学的学号,姓名,年龄,家庭住址信息,要求设置并输出这些同学的信息;#include #include using namespace std; class Student public: void setStudentint n,char na,int a,char addr; void showStudent; private: int no; char name20; int age; char address50; ; void Student:

10、setStudentint n,char na,int a,char addr no=n; strcpyname,na; age=a; strcpyaddress,addr; void Student:showStudent 11 coutno name age addressendl; int main Student std; std.setStudent1,Mary,20, 吉林省长春市 ; std.showStudent; return 0; 4.3 构造函数和析构函数4.3.1 构造函数定义在定义一个对象的时候进行的数据成员设置,称为对象的初始化;构造函数的作用就是在对象被创建时利用

11、特定的值构造对象,将对象初始化为一个特定的状态;构造函数在对象被创建的时候将被自动调用;如 果程序中未声明,就系统自动产生出一个隐含的参数列表为空的构造函数;定义构造函数的一般形式为:class 类名 public: 类名(形参表) ; /构造函数的原型 /类的其它成员 ; 类名 :类名(形参表) /构造函数的实现 /函数体 类的构造函数承担对象的初始化工作,它旨在使对象初值有意义;对构造函数,说明以下几点:1. 构造函数的函数名必需与类名相同; 构造函数的主要作用是完成初始化 对象的数据成员以及其它的初始化工作;2. 在定义构造函数时,不能指定函数返回值的类型,也不能指定为 void 类型;

12、3. 在类的内部定义的构造函数是内联函数;构造函数可以带默认形参值,也可以重载;一个类可以定义如干个构造函数;当定义多个构造函数时,12 必需满意函数重载的原就;类对象创建时,构造函数会自动执行;由于它 们没有类型,不能像其他函数那样进行调用;当类对象说明时调用哪一个 构造函数取决于传递给它的参数类型;4. 如定义的类要说明该类的对象时,构造函数必需是公有的成员函数;如果定义的类仅用于派生其它类时,就可将构造函数定义为爱护的成员函 数;由于构造函数属于类的成员函数,它对私有数据成员、爱护的数据成 员和公有的数据成员均能进行初始化;4.3.2 调用构造函数当定义类对象时,构造函数会自动执行;1.

13、调用默认构造函数调用默认构造函数的语法:类名类对象名;在程序中定义一个对象而没有指明初始化时,编译器便按默认构造函 数来初始化该对象;默认构造函数并不对所产生对象的数据成员赋初值;即新产生对象的 数据成员的值是不确定的;关于默认构造函数,说明以下几点:可以多个构造函数 带默认参数,但程1、在定义类时,只要显式定义了一个类的构造函数,就编译器就不产生 默认构造函数;2、全部的对象在定义时必需调用构造函数,不存在没有构造函数的对象!3、在类中,如定义了没有参数的构造函数,或各参数均有缺省值的构造序 中 不 能 使 用 MyClass obj ;这样 定义对象,即不能 够调用默认构造函 数;函数也称

14、为默认构造函数,默认构造函数只能有一个;4、产生对象时,系统必定要调用构造函数;所以任一对象的构造函数必须唯独;2.调用带参数的构造函数假如定义了一个对 象并且期望默认构造函数被执行,在调用带参数的构造函数的语法如下:类名 类对象名(参数表)定义语句中,“ 类对 象名” 后面是不需 要空括号的;假如参数表中的参数可以是变量,也可以是表达式;3. 一次性对象创建对象假如不给出对象名,也就是说,直接以类名调用构造函数,包含了空括号,编 译器将会产生一个 语法错误信息;例如“MyClass2 mysa; ” 语句是非 法的;13 就产生一个无名对象;无名对象常常在参数传递时用到;例如:cout Da

15、te2003,12,23; Date2003, 12,23是一个对象,该对象在做了操作后便烟消云散了,所以这种对象一般用在创建后不需要反复使用的场合;4. 用构造函数初始化对象的过程用构造函数初始化对象的过程,实际上是对构造函数的调用过程;一般按如下步骤进行:(1)程序执行到定义对象语句时,系统为对象安排内存空间;(2)系统自动调用构造函数,将实参传送给形参,执行构造函数体 时,将形参值赋给对象的数据成员;完成数据成员的初始化工作;4.3.3 复制构造函数用于将一个已知对象的数据成员复制给正在创建的另一个同类的对 象;格式如下:类名:复制构造函数(类名 & 引用名)或 类名:复制构造函数( c

16、onst 类名 & 引用名)假如程序员没有为类声明拷贝初始化构造函数,就编译器自己生成一 个隐含的拷贝构造函数;这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的 值,初始化将要建立的对象的对应数据成员;但是,当类中的数据成员中使用new 运算符,动态地申请储备空间进行赋初值时,必需在类中显式地定义一个完成拷贝功能的构造函数,以便 正的确现数据成员的复制;拷贝构造函数就是函数的形参是类的对象的引用的构造函数;假如 程序在类定义时没有显式定义拷贝构造函数,系统也会自动生成一个默认 的拷贝构造函数,把成员值一一复制;拷贝构造函数与原先的构造函数实 现了函数的重载;在以下 3 中情形下,复

17、制构造函数都会被调用:. 当用类的一个对象去初始化该类的另一个对象时系统自动调用拷 贝构造函数实现拷贝赋值;. 如函数的形参为类对象,调用函数时,实参赋值给形参,系统自动 调用拷贝构造函数;14 . 当函数的返回值是类对象时,系统自动调用拷贝构造函数;4.3.4 析构函数C+程序设计的一个原就是:由系统自动安排的内存空间由系统自动 释放;而手工安排的内存空间必需手工是否,否就可能造成内存泄漏;人为的动态内存释放工作由析构函数来完成,它的意义是做关于对象 本体失效之前瞬时的善后工作;这与构造函数的工作正好相反,当对象生 存期终止时,需要调用析构函数,释放对象所占的内存空间,所以给它取 的名字也是

18、波浪 “”号加上类名,以示与构造函数在功能上的对应关系;析构函数与构造函数是成对显现的;析构函数是在对象生存期即将终止的时刻由系统自动调用的;显式定义析构函数格式为:类名:析构函数名 语句; 与析构函数名 中间没有空格如在类的定义中没有显式地定义析构函数时,系统将自动生成和调用 一个默认析构函数,其格式为:默认析构函数是一 个空函数;类名:默认析构函数名 任何对象都必需有构造函数和析构函数,但在撤消对象时,要释放对 象的数据成员用 new 运算符安排的动态空间时,必需显式地定义析构函数;析构函数的特点如下:1、析构函数是成员函数,函数体可写在类体内,也可写在类体外;2、析构函数是一个特别的成员

19、函数,函数名必需与类名相同,并在其前 面加上字符 “ ”,以便和构造函数名相区分;3、析构函数也是类的一个公有成员函数,不能带有任何参数,不能有返 回值,不指定函数类型;4、一个类中,只能定义一个析构函数,析构函数不答应重载;5、析构函数是在撤消对象时由系统自动调用的;在程序的执行过程中,当遇到某一对象的生存期终止时,系统自动调 用析构函数,然后再收回为对象安排的储备空间;对象在定义时自动调用构造函数,生存期即将终止时调用析构函数!15 4.4 类的组合4.4.1 类的组合类中的成员数据是另一个类的对象;可以在已有抽象的基础上实现更 复杂的抽象;原就:不仅要负责对本类中的基本类型成员数据赋初值

20、,也要对对象 成员初始化;声明形式:类名 :类名 对象成员所需的形参,本类成员形参 本类初始化 类组合的构造函数调用:对象 1参数 ,对象 2参数 ,. 构造函数调用次序:先调用内嵌对象的构造函数(按内嵌时的声明顺 序,先声明者先构造) ;然后调用本类的构造函数; (析构函数的调用次序相反)初始化列表中未显现的内嵌对象,用默认构造函数(即无形参的)初 始化 系统自动生成的隐含的默认构造函数中,内嵌对象全部用默认构造函 数初始化4.4.2 前向引用声明类应当先声明,后使用 假如需要在某个类的声明之前,引用该类,就应进行前向引用声明;前向引用声明只为程序引入一个标识符,但详细声明在其他地方;使用前

21、向引用声明虽然可以解决一些问题,但它并不是万能的;需要 留意的是,尽管使用了前向引用声明, 但是在供应一个完整的类声明之前,不能声明该类的对象,也不能在内联成员函数中使用该类的对象;应当记住:当你使用前向引用声明时,你只能使用被声明的符号,而 不能涉及类的任何细节;16 4.5 UML 简介UML 语言是一种可视化的的面对对象建模语言;UML 有三个基本的部分 事物( Things)UML 中重要的组成部分, 在模型中属于最静态的部分, 代表概念上的 或物理上的元素 关系( Relationships)关系把事物紧密联系在一起图( Diagrams)图是许多有相相互关的事物的组UML 中有 4 种类型的事物 结构事物( Structural things)动作事物( Behavioral things)分组事物( Grouping things)注释事物( Annotational things)UML 中的关系 依靠( Dependencies)关联( Association)泛化( Generalization)实现( Realization)UML 中的 9 种图 类图( Class diagram)对象图( Object diagram)用例图( Use case diagram)次序图( Sequence

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论