C++程序设计 大学基础教程第八章.ppt

上传人:暗伤 文档编号:96549883 上传时间:2023-12-23 格式:PPT 页数:54 大小:229KB
返回 下载 相关 举报
C++程序设计 大学基础教程第八章.ppt_第1页
第1页 / 共54页
C++程序设计 大学基础教程第八章.ppt_第2页
第2页 / 共54页
点击查看更多>>
资源描述

《C++程序设计 大学基础教程第八章.ppt》由会员分享,可在线阅读,更多相关《C++程序设计 大学基础教程第八章.ppt(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C+大学基础教程大学基础教程第第8 8章章 类与对象类与对象北京科技大学北京科技大学信息基础科学系信息基础科学系类是实现C+面向对象程序设计的基础。面向对象程序设计的基本特点有:抽象、封装、继承和多态,类把数据和函数封装在一起,是C+封装的基本单元。28.1 8.1 类和对象的定义类和对象的定义8.2 8.2 对象的使用对象的使用8.3 8.3 构造函数构造函数8.4 8.4 析构函数析构函数 8.5 8.5 拷贝构造函数拷贝构造函数 8.6 8.6 类的静态成员类的静态成员 8.7 8.7 类成员的保护和使用类成员的保护和使用8.8 类的组合(不要求)8.9 面向对象分析和设计(不要求)第第

2、8 8章章 类与对象类与对象3 8.1 8.1 类和对象的定义类和对象的定义8.18.1 类和对象的定义类和对象的定义一个类表示现实生活中的一类事物,比如一个类表示现实生活中的一类事物,比如“学生学生”n事物有相应的特征或属性,它们就是类的数据成员;事物有相应的特征或属性,它们就是类的数据成员;n事物可能有行为动作,也可能被某些行为动作所操作,事物可能有行为动作,也可能被某些行为动作所操作,这些都用函数来实现,这些函数和类有着不可分割的这些都用函数来实现,这些函数和类有着不可分割的关系,是构成类的函数成员,或者叫成员函数。关系,是构成类的函数成员,或者叫成员函数。在在C+C+中,类实际上相当于

3、一种用户自定义的数中,类实际上相当于一种用户自定义的数据类型。据类型。5对象是一类事物中的一个具体的个体。对象是一类事物中的一个具体的个体。在定义了类类型后,就可以定义该类型在定义了类类型后,就可以定义该类型的变量,这个变量就称为类的对象(或的变量,这个变量就称为类的对象(或实例)。所以,从程序设计的角度来看,实例)。所以,从程序设计的角度来看,对象就相当于变量。对象就相当于变量。8.18.1 类和对象的定义类和对象的定义6举例:举例:class Student /类的定义private:int id;char name20;int age;float score;public:void ge

4、tscore()void printstu();8.18.1 类和对象的定义类和对象的定义71 1、使用、使用类对象类对象如果已经知道某个类的功能和接口函数,就可以如果已经知道某个类的功能和接口函数,就可以使用它了。先定义类对象,通过对象调用接口函使用它了。先定义类对象,通过对象调用接口函数实现一定的功能。数实现一定的功能。class student stu01;/class也可以省略不写也可以省略不写stu01.getscore();stu01.printstu();这这个个过过程程的的本本质质是是:根根据据对对象象所所需需要要完完成成的的任任务务,向向对对象象发发送送消消息息。对对象象收收

5、到到消消息息后后,调调用用接接口口中中的的相相应应的的函函数数,完完成成它它的的功功能能。对对象象只只需需要要知知道道“做什么做什么”,具体工作由成员函数来完成。,具体工作由成员函数来完成。82 2、类的声明类的声明类的声明具体说明类的组成,声明类的语法形类的声明具体说明类的组成,声明类的语法形式为:式为:class class 类名称类名称 public:public:公有成员公有成员protect:protect:保护型成员保护型成员private:private:私有成员私有成员;9其中,其中,“成员成员”既可以是数据成员,也可以是既可以是数据成员,也可以是成员函数的原型。成员函数的原型

6、。n数据成员的声明方式与一般变量相同。数据成员的声明方式与一般变量相同。n函数成员是描述类的对象可以进行的操作,函数成员是描述类的对象可以进行的操作,一般在类中声明原型,在类声明的外面定义一般在类中声明原型,在类声明的外面定义函数的具体实现。函数的具体实现。2 2、类的声明类的声明102 2、类的声明类的声明关键字关键字publicpublic、protectprotect、privateprivate说明类成员说明类成员的访问控制属性。的访问控制属性。n私有(私有(privateprivate)成员只允许本类的成员函成员只允许本类的成员函数来访问;数来访问;n公有(公有(publicpubl

7、ic)成员是类对外的接口,在类成员是类对外的接口,在类声明和类(函数)实现之后,类的对象可以声明和类(函数)实现之后,类的对象可以访问公有成员。访问公有成员。n保护型(保护型(protectedprotected)成员的可访问性和私成员的可访问性和私有成员的性质相似。有成员的性质相似。11关于访问控制属性,注意:关于访问控制属性,注意:在在类类声声明明中中,三三种种访访问问控控制制属属性性,可可以以按按任任意意次次序序出出现现,也也可可以以不不出出现现。publicpublic等等关关键键字字也也可可以以多多次次出出现现,但是一个成员只能具有一种访问控制属性。但是一个成员只能具有一种访问控制属

8、性。如如果果不不写写访访问问控控制制属属性性关关键键字字,默默认认的的是是privateprivate。在在书书写写时时通通常常习习惯惯将将公公有有类类型型放放在在最最前前面面,这这样样便便于于阅阅读,因为它们是外部访问时所要了解的。读,因为它们是外部访问时所要了解的。一一般般情情况况下下,一一个个类类的的数数据据成成员员应应该该声声明明为为私私有有成成员员,这这样样封封装装性性较较好好。一一个个类类应应该该有有一一些些公公有有的的函函数数成成员员,作为对外的接口,否则别的代码无法访问类作为对外的接口,否则别的代码无法访问类 2 2、类的声明类的声明12类类的的成成员员函函数数描描述述的的是是

9、类类的的行行为为或或操操作作。函函数数的的原原型型声声明明要要在在类类的的主主体体中中,原原型型说说明明了了函函数数的的参参数数表表和和返返回回值值类类型型。而而函函数数的的具具体体实实现现一一般是写在类声明之外的。般是写在类声明之外的。在类的外部定义成员函数的语法形式为:在类的外部定义成员函数的语法形式为:返回值类型返回值类型 类名类名:成员函数名成员函数名(参数表参数表)函数体函数体 3 3、类的成员函数类的成员函数13如果在类的内部定义成员函数的具体实现,则如果在类的内部定义成员函数的具体实现,则该成员函数为内联成员函数。该成员函数为内联成员函数。函数定义时没有任何的附加说明,所以称为隐

10、函数定义时没有任何的附加说明,所以称为隐式声明的内联成员。式声明的内联成员。3 3、类的成员函数类的成员函数14定义一个对象和定义一个一般变量相同。定义一个对象和定义一个一般变量相同。定定义义变变量量时时要要分分配配存存储储空空间间,同同样样,定定义义一一个个对对象象时时要要分分配配存存储储空空间间,一一个个对对象象所所占占的的内内存存空空间间是是类类的的数数据据成成员员所所占占的的空空间间总总和和。类类的的成成员函数存放在代码区,不占内存空间。员函数存放在代码区,不占内存空间。类类的的成成员员是是抽抽象象的的,对对象象的的成成员员才才是是具具体体的的。类类的的数数据据成成员员都都不不会会有有

11、具具体体的的属属性性值值。只只有有对对象的成员才会有具体的属性值。象的成员才会有具体的属性值。4 4、对象、对象15声明了类及其对象,在类的外部(指类定义和声明了类及其对象,在类的外部(指类定义和成员函数的实现代码之外),就可以访问对象成员函数的实现代码之外),就可以访问对象的公有成员(包括数据成员和函数成员)了。的公有成员(包括数据成员和函数成员)了。在类的外部,只能通过对象访问类的公有成员;在类的外部,只能通过对象访问类的公有成员;在类的成员函数内部,可以直接访问类的所有在类的成员函数内部,可以直接访问类的所有成员,这就实现了对访问范围的有效控制。成员,这就实现了对访问范围的有效控制。4

12、4、对象、对象16类类作作用用域域是是指指类类定定义义和和相相应应的的成成员员函函数数定定义义的的范范围围,通通俗俗地地称称为为类类的的内内部部。C+C+认认为为一一个个类类的的全全部部成成员员都都是是一一个个整整体体的的相相关关部部分分。一一个个类类的的所所有有成成员员位位于于这这个个类类的的作作用用域域内内,在在该该范范围围内内,一一个个类类的的成成员员函函数数对对本本类类的的其其它它成成员员具具有有无限制的访问权。无限制的访问权。5 5、类的作用域与可见性、类的作用域与可见性17 8.2 8.2 对象的使用对象的使用8.28.2 对象的使用对象的使用对象是类的一个具体的实例,类和对象的关

13、系相当于普遍与特殊的关系。在C+中,类是一个自定义的数据类型,对象是该数据类型的一个变量。所以,可以定义一个全局的对象,也可以在函数体中定义一个局部的对象,或者动态地从堆中申请空间来创建一个对象,还可以定义对象数组,以及使用对象作为函数的参数与返回值。191 1、对象、对象指针指针声明对象指针的一般语法形式为:类名*对象指针名;使用对象指针访问对象的成员,语法形式为:对象指针名-公有成员;例如:Clock c;/在栈中分配Clock型存储空间Clock*pc1=new Clock;/在堆中分配Clock型存储空间Clock*pc2=&c;pc1-SetTime(12,5,0);202 2、th

14、isthis指针指针问:一个类中所有对象调用的成员函数都执行同一段代码。那么,成员函数又是怎么识别当前是那个对象在访问呢?答:this指针指出了成员函数当前所操作的数据所属的对象。不同的对象调用成员函数时,this指针将指向不同的对象,也就可以访问不同对象的数据成员。213 3、对象数组、对象数组对象数组的元素是对象,不仅具有数据成员,而且还有函数成员,可以通过数组元素调用成员函数。224 4、对象用做函数的参数和返回值、对象用做函数的参数和返回值可以将对象作为参数传递给一个函数或从函数返回一个对象。直接用对象作为参数,调用函数时,进行值传递,实参的值要复制给形参,如果类的数据成员较多时,需要

15、一一复制,这种参数传递方式效率不高,可以使用对象指针或对象引用方式来传递函数参数。23 8.3 8.3 构造函数构造函数8.38.3 构造函数构造函数每个对象区别于其他对象的地方主要有两个,外在的区别就是对象的标识符,即对象的名称,而内在的区别就是对象自身的属性值,即数据成员的值。在定义一个对象的时候要给它分配存储空间,也可以同时给它的数据成员赋初值,称为对象的初始化。C+程序中的对象初始化工作由一个特殊的成员函数来完成,就是构造函数。因为不同类型的对象的初始化工作是不一样的,因此构造函数从属于某个类的,即每个类都要定义它自己的构造函数,它是类的成员函数。25定义构造函数的一般形式为:clas

16、s 类名 public:类名(形参表);/构造函数的原型/类的其它成员;类名:类名(形参表)/构造函数的实现/函数体 8.38.3 构造函数构造函数26构造函数的特点是:构造函数的函数名与类名相同;而且没有返回值。构造函数一定是公有函数。作为类的成员函数,构造函数可以直接访问类的所有数据成员。在类的内部定义的构造函数是内联函数。构造函数可以带默认形参值,也可以重载。8.38.3 构造函数构造函数27在声明类是如果没有定义类的构造函数,编译系统就会在编译时自动生成一个默认形式的构造函数,默认构造函数是构造对象时不提供参数的构造函数。除了无参数构造函数是默认构造函数外,带有全部默认参数值的构造函数

17、也是默认构造函数。8.38.3 构造函数构造函数28 8.4 8.4 析构函数析构函数与构造函数相反,当对象生存期结束时,需要调用析构函数,释放对象所占的内存空间。与构造函数一样,析构函数也是类的一个公有成员函数,它的名称是在类名前加“”构成,没有返回值,和构造函数不同的是析构函数不接受任何参数。析构函数是在对象生存期即将结束的时刻由系统自动调用的。如果程序员没有定义析构函数,系统将自动生成和调用一个默认析构函数。类的析构函数不能重载。8.48.4 析构函数析构函数30 8.5 8.5 拷贝构造函数拷贝构造函数拷贝构造函数就是函数的形参是类的对象的引用的构造函数。通过等于号复制对象时,系统会自

18、动调用拷贝构造函数。如果程序在类定义时没有显式定义拷贝构造函数,系统也会自动生成一个默认的拷贝构造函数,把成员值一一复制。拷贝构造函数与原来的构造函数实现了函数的重载。8.58.5 拷贝构造函数拷贝构造函数32完成简单的一一对应的复制的拷贝构造函数称为浅拷贝。如果类的数据成员包括指针变量,类的构造函数用new运算符为这个指针动态申请空间。如果通过浅拷贝进行了对象的复制。最后,在退出运行时,程序会报错。这时需要用“深拷贝”的方式恰当定义类的拷贝构造函数。一般来讲,如果一个类需要析构函数来释放资源,则它也需要定义一个显式拷贝构造函数来实现深拷贝。浅拷贝与深拷贝浅拷贝与深拷贝33以下三种情况系统会自

19、动调用拷贝构造函数:当用类的一个对象去初始化该类的另一个对象时 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时 如果函数的返回值是类的对象,函数执行完成返回调用者时 8.58.5 拷贝构造函数拷贝构造函数34 8.6 8.6 类的静态成员类的静态成员1 1、静态数据成员静态数据成员静态数据成员是类的数据成员的一种特例,采用static关键字来声明。类的数据成员在类的每一个对象中分别存储不同的数值,但是静态数据成员则不同,它在整个类中只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同一类的不同对象之间的数据共享。静态数据成员具有静态生存期。在类的声明中只能声明静态数据成员的存

20、在。由于类的声明是抽象的,静态数据成员的初始化需要在类的外部进行,通过类名对它进行访问。362 2、静态成员函数、静态成员函数可以通过定义和使用静态成员函数来访问静态数据成员。所谓静态成员函数就是使用static关键字声明函数成员。同静态数据成员一样,静态成员函数也属整个类,由同一个类的所有对象共同维护,为这些对象所共享。372 2、静态成员函数、静态成员函数静态成员函数作为成员函数,它的访问属性可以受到类的严格控制。对公有静态成员函数,可以通过类名或对象名来调用;而一般的非静态公有成员函数只能通过对象名来调用。静态成员函数可以直接访问该类的静态数据成员和函数成员;而访问非静态数据成员,必须通

21、过参数传递方式得到对象名,然后通过对象名来访问。38 8.7 8.7 类成员的保护和使用类成员的保护和使用1 1、类的封装类的封装在程序设计中,将数据与操作数据的行为进行有机地结合,这就是封装。C+语言提供类这种语言成分来实现封装,类是属性和操作的结合体,并且在定义类的属性和操作时,规定了它们的可见性。通过封装将一部分成员作为类与外部的接口,而将其它的成员隐藏起来,以防外界的干扰和误操作,使程序的不同模块之间的相互影响减小到最低限度。402 2、友元、友元在一个类中,可以利用关键字friend将别的模块(一般函数、其它类的成员函数或其它类)声明为本类的友元,这样类中本来隐藏的信息(私有和保护成

22、员)就可以被友元访问。友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。友元并不是类的成员。412 2、友元、友元关于友元类,要注意:友元关系是不能传递的。B类是A类的友元,C类是B类的友元,C类和A类之间,如果没有声明,就没有任何友元关系,不能进行数据共享。友元关系是单向的。如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有和保护数据。423 3、常对象和常成员、常对象和常成员定义对象时用const进行修饰,称为常对象,它的数据成员值在对象的整个生存期间内不能被改变。也就是说,常对象在定义时必须进行初

23、始化,而且不能被更新。使用常量,既实现了数据共享、又可以保证数据不会被改变。433 3、常对象和常成员、常对象和常成员对于类的某个成员函数,使用const关键字修饰,称为常成员函数。常对象只能调用常成员函数,保证常对象的数据成员不能被修改。使用const说明的数据成员称为常数据成员。如果在一个类中说明了常数据成员,那么任何函数中都不能对该成员赋值。构造函数对该数据成员进行初始化,就只能通过初始化列表。443 3、常对象和常成员、常对象和常成员常成员函数的特点:const是函数类型的一个组成部分,在函数实现时也要带const关键字。常成员函数不能更新对象的数据成员,也不能调用该类中的非常成员函数

24、。常对象只能调用常成员函数,但是常成员函数也可以被普通对象来调用。const关键字可以被用于参与对重载函数的区分。45 8.8 8.8 类的组合类的组合8.88.8 类的组合类的组合类的组合(也称类的聚集),描述的就是一个类内嵌其它类的对象作为数据成员的情况,它们之间的关系是一种包含与被包含的关系。在面向对象程序设计中,可以对复杂对象进行分解、抽象,把一个复杂对象分解为简单对象的组合。47当创建组合类的对象时,各个内嵌对象也将被自动创建。因此,在创建组合类对象时既要对本类的基本数据成员进行初始化,又要对内嵌对象成员进行初始化。在声明一个组合类的对象时,不仅它自身的构造函数将被调用,而且还将调用

25、其内嵌对象的构造函数。8.88.8 类的组合类的组合48组合类构造函数定义的一般形式为:类名:类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表),/类的初始化其中,“内嵌对象1(形参表),内嵌对象2(形参表),”为初始化列表,用来完成对内嵌对象的初始化。8.88.8 类的组合类的组合49组合类的构造函数的执行顺序是:(1)(如果有多个内嵌对象)按照内嵌对象在组合类的声明中出现的次序,依次调用其内嵌对象的构造函数。(注意:并不是按照初始化列表中给出的顺序)。(2)再执行本类的构造函数的函数体。8.88.8 类的组合类的组合50 8.9 8.9 面向对象分析和设计面向对象分析和设计建立一个

26、大型的软件系统可不是一件简单的事情,它是一项大工程,人们称它为软件工程,它研究如何建立大型软件系统:可靠性;成本效益好;可理解性;可维护性。8.9 8.9 面向对象分析与设计面向对象分析与设计52面向对象程序设计是面向对象思想在软件工程领域的全面应用,包括:面向对象分析(OOA),面向对象设计(OOD),面向对象编程(OOP),等。面向对象分析阶段要把问题的范围定义清楚,分析系统需求,把实际中不重要的东西忽略,对所关心的问题建立一个模型。设计是在分析的基础上进一步加工,OOD阶段是对OOA模型的修改和补充,采用一致的概念、原则和表示法,二者没有严格的阶段划分,但设计阶段侧重于考虑与实现有关的细节。到了OOP阶段,OOD阶段设计的类被具体的程序设计语言的类所实现。8.9 8.9 面向对象分析与设计面向对象分析与设计53作业作业第第8 8章习题:章习题:1515,1616,202054

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁