您好,欢迎访问三七文档
2020/1/291第7章类与对象教学主要内容面向对象程序设计的基本思想类的定义和对象的定义类的成员对象成员的引用构造函数重点与难点类与对象的定义成员的引用2020/1/292第7章类与对象教学目标掌握类的声明和定义对象的方法掌握成员函数的定义掌握对象成员的引用理解保护数据如何屏蔽外部访问的原理。掌握构造函数的使用2020/1/293第7章类与对象7.1类7.2对象7.3构造函数和析构函数2020/1/294程序设计方法的发展历程•面向过程的结构化程序设计采用模块分解与功能抽象,自顶向下,分而治之。以服务(功能)为中心。优缺点:复杂的任务-分解成子任务;可重用性差。•面向对象的程序设计以数据为中心,数据相对于功能而言,具有更强的稳定性。代码重用。2020/1/295面向对象程序设计的基本思想面向对象方法是开发计算机软件的一种方法。这种方法比面向过程的方法可提高可用性,适用于图形界面的使用,减少模块间的依赖关系,有利用程序的调试和修改。该方法是一种采用了类、对象、继承和多态等新概念的新方法。将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体——对象。对同类型对象抽象出其共性,形成类。2020/1/296面向对象程序设计的基本思想1.对象对象是包含现实世界物体特征的抽象实体,它反映了系统为之保存信息和(或)与它交互的能力。它是一些属性及服务的一个封装体。对象=数据+作用于这些数据上的操作对象一般可以表示为:属性+行为。2020/1/297面向对象程序设计的基本思想现实世界中的对象一般具有以下特性:(1)每一个对象必须有一个名字以区别于其他对象。(2)用属性来描述对象的某些特征。(3)有一组操作,每个操作决定对象的一种行为。对象是描述客观事物的一种实体。它可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。是构成世界的一个独立单位。2020/1/298面向对象程序设计的基本思想2.类类是具有相同操作功能和相同的数据格式(属性)的对象的集合。在面向对象程序设计中,类是具有相同属性数据和操作的对象的集合,它是对一类对象的抽象描述。类是创建对象的模板,它包含着所创建对象的状态描述和方法的定义,一般是先声明类,再由类创建其对象。按照这个模板创建的一个个具体的实例,就是对象。2020/1/299定义汽车类(Car)2020/1/2910“对象是封装了数据结构及可以施加在这些数据结构中的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务(即操作)。”2020/1/2911概括地说,面相对象方法具有下述四个要点:①认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成;②把所有对象都划分成各种对象类(简称为类,Class),每个对象类都定义了一组数据和一组方法;③按照子类与父类的关系,把若干个对象类组成一个层次结构的系统;④对象彼此之间仅能通过传递消息互相联系;2020/1/2912抽象由于不能应付对象的复杂性,人们就选择了这样的方法:抛弃非本质的细节,集中于我们最关心的材料。“抽象是指区别于所有其它种类对象的‘对象的本质特征’,因此,相对于观察者来看,它提供了清晰的、有定义的概念边界。”2020/1/2913封装“我是客户,我只需知道如何驾驶汽车就够了!”“我是专业技师,我知道汽车中的每一个零件!”2020/1/2914用相关的方法把变量包围起来与外界隔离,称为封装。封装后的对象外界不能直接访问其内部数据,各对象间必须通过消息来通信。换一句话来说,封装实际上就是使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。2020/1/2915类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,包括属性和行为两个主要部分。数据描述类的属性,用数据成员表示;行为描述类的服务,用成员函数表示。7.1类2020/1/2916classTStudent{public:voidSetStudent(char*sn,char*name,intage,intcn);voidShowStudent();//成员函数private:charsno[5];//数据成员charsname[10];intsage;intcno;};类定义实例2020/1/2917(1)class是定义类的关键字。(2)类的成员包含数据成员和成员函数两部分。(3)从访问权限上来分,类的成员又分为:公有的(public)、私有的(private)和保护的(protected)三类。说明2020/1/2918(4)数据成员描述类的属性。数据成员的定义与一般的变量定义相同,但需要将它放在类的定义体中。但是在类中说明的任何成员不能使用extern、auto和register关键字进行修饰。(5)类中的数据成员的类型可以是任意的,包括基本类型、数组、指针和引用等。也可以是对象。2020/1/2919(6)在类体中不允许对所定义的数据成员进行初始化。(7)经常习惯地将类定义的说明部分或者整个定义部分(包含实现部分)放到一个头文件中。说明2020/1/2920(8)在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。(9)在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。(10)protected与private类似,其差别表现在继承与派生时对派生类的影响不同。2020/1/2921任务1:定义Tdate类,要求如下:公有成员:Set(intm,intd,inty)方法,用来设置年、月、日。IsLeapYear()用来判断是否闰年。Print()方法打印出时间(按照XXXX年XX月XX日的格式)私有成员:(根据需要自行定义)2020/1/29221.在类外定义函数体(1)以普通函数的形式定义返回类型类名::成员函数名(参数表){//函数体}(2)以内联函数的形式定义inline返回类型类名::成员函数名(参数表){//函数体}7.1.2成员函数的实现2020/1/2923voidTStudent::SetStudent(char*sn,char*name,intage,intcn){strcpy(sno,sn);strcpy(sname,name);sage=age;cno=cn;}voidTStudent::ShowStudent(){coutsetw(6)snosetw(12)snamesetw(6)sagesetw(6)cno\n;coutsetw(6)snosetw(12)snamesetw(6)sagesetw(6)cnoendl;}在类外部定义成员函数实例2020/1/2924inlinevoidTStudent::SetStudent(char*sn,char*name,intage,intcn){strcpy(sno,sn);strcpy(sname,name);sage=age;cno=cn;}inlinevoidTStudent::ShowStudent(){coutsetw(6)snosetw(12)snamesetw(6)sagesetw(6)cno\n;coutsetw(6)snosetw(12)snamesetw(6)sagesetw(6)cnoendl;}外部定义的内联函数实例2020/1/2925•任务2:实现Tdate类中的成员函数。Set(intm,intd,inty)方法,用来设置年、月、日。IsLeapYear()用来判断是否闰年。Print()方法打印出时间(按照XXXX年XX月XX日的格式)2020/1/2926classTStudent{public:voidSetStudent(char*sn,char*name,intage,intcn){strcpy(sno,sn);strcpy(sname,name);sage=age;cno=cn;};voidShowStudent(){coutsetw(6)snosetw(12)snamesetw(6)sagesetw(6)cno\n;coutsetw(6)snosetw(12)snamesetw(6)sagesetw(6)cnoendl;};private:charsno[5];charsname[10];intsage;intcno;};在类内部定义成员函数实例2020/1/2927【说明】(1)函数名SetStudent前面加了TStudent::来说明该函数属于TStudent类。(2)类成员函数可以直接访问类的私有部分数据sno、sname、sage和cno,而类的外部不能直接访问私有数据sno、sname、sage和cno,只能通过公有函数SetStudent()和ShowStudent()访问私有数据。(3)在类内的成员函数,如果函数体直接写在类内部,不必写inline,自动为内联函数。类的成员函数2020/1/2928对象(类的实例):具有该类类型的某一特定实体。如果将类看作是自定义的类型,那么类的对象就可以看成是该类型的变量。有时将普通变量和类类型的对象都统称为对象。类是对象的抽象,而对象是类的具体实例(instance)。类是抽象的,不占用内存,而对象是具体的,占用存储空间。7.2对象2020/1/29291.在定义类的同时创建对象classTStudent{public:voidSetStudent(char*sn,char*name,intage,intcn);voidShowStudent();private:charsno[5];charsname[10];intsage;intcno;}s2,s3;7.2.1对象的定义2020/1/29302.在使用时定义对象例如:直接用类名定义对象。TStudents1,s5[6];定义了一个类对象s1和一个对象数组s5[6]。在程序运行时,通过为对象s1分配内存来创建对象;对象s1被称为类TStudent的一个实例。对象的定义2020/1/29311.通过对象名和成员运算符访问对象中的成员【格式】对象名.数据成员名或对象名.成员函数名(参数表)7.2.2访问对象中的成员例如:TStudents1,s5[6];//定义对象s1s1.SetStudent(001,aaa,17,12);s1.ShowStudent();2020/1/29322.通过指向对象的指针访问对象中的成员【格式】指向对象的指针-数据成员名或指向对象的指针-成员函数名(参数表)访问对象中的成员例如:TStudents1,s5[6],*p=&s1;p-SetStudent(001,aaa,17,12);p-ShowStudent();2020/1/2933类成员有三种访问属性:公有(public)、私有(private)和保护(protected)。(1)public公有的成员不但可以被类中成员函数访问,还可在类的外部通过类的对象进行访问。(2)private私有的成员只能被类中成员函数访问,不能在类的外部通过类的对象进行访问。(3)protected保护的成员除了类本身的成员函数可以访问外,其差别表现在继承与派生时对派生类的影响不同。关于这点,将在后面的相关章节中介绍。7.2.3类成员的访问属性2020/1/2934【实例7-1】定义一个描述学生的类及该类的对象,并用对象访问其成员。对象访问其成员实例#includeiostream.h//定义TStudent类#includestring.h#includeiomanip.hclassTStudent{public:voidSetStudent(char*sn,char*na
本文标题:C++类与对象
链接地址:https://www.777doc.com/doc-3376742 .html