c++入门基础PPT4资料

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第8章类到目前为止,我们介绍的是C++在面向过程的程序设计中的应用。对于规模比较小的程序,编程者可以直接编写出一个面向过程的程序,详细地描述每一瞬时的数据结构及对其的操作过程。但是当程序规模较大时,就显得力不从心了。C++就是为了解决编写大程序过程中的困难而产生的。主要内容•面向对象程序设计•二维数组•字符数组•字符串8.0面向对象程序设计•面向对象的程序设计的思路和人们日常生活中处理问题的思路是相似的。在自然世界和社会生活中,一个复杂的事物总是由许多部分组成的。•当人们生产汽车时,分别设计和制造发动机、底盘、车身和轮子,最后把它们组装在一起。在组装时,各部分之间有一定的联系,以便协调工作。•这就是面向对象的程序设计的基本思路。•为了进一步说明问题,下面先讨论几个有关的概念。8.0面向对象程序设计1.类•类是一种可以作为交易的概念代码.类是自定义的数据类型.类与应用程序不同,类的功能虽然独立,但不能独立启动。•类是C++中十分重要的概念,它是实现面向对象程序设计的基础。类是所有面向对象的语言的共同特征,所有面向对象的语言都提供了这种类型。一个有一定规模的C++程序是由许多类所构成的。8.0面向对象程序设计2.对象•客观世界中任何一个事物都可以看成一个对象(object)。•对象可大可小。对象是构成系统的基本单位。•任何一个对象都应当具有这两个要素,即属性(attribute)和行为(behavior),它能根据外界给的信息进行相应的操作。一个对象往往是由一组属性和一组行为构成的。一般来说,凡是具备属性和行为这两种要素的,都可以作为对象。•在一个系统中的多个对象之间通过一定的渠道相互联系,如图示意。要使某一个对象实现某一种行为(即操作),应当向它传送相应的消息。对象之间就是这样通过发送和接收消息互相联系的8.0面向对象程序设计3类和对象的关系•类是表示一类事务的抽象数据类型。•对象是具体存在的,它是是类的一个实例。如一个三角形可以作为一个对象,10个不同尺寸的三角形是10个对象。如果这10个三角形对象有相同的属性和行为,可以将它们抽象为一种类型,称为三角形类型。在C++中,这种类型就称为“类(class)”。这10个三角形就是属于同一“类”的对象。类是对象的抽象,而对象则是类的特例,或者说是类的具体表现形式。类对象对象化实例化8.0面向对象程序设计4.封装与信息隐蔽•可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的,甚至是不可知的。•这样做的好处是大大降低了操作对象的复杂程度。•面向对象程序设计方法的一个重要特点就是“封装性”(encapsulation),所谓“封装”,指两方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽(informationhiding)。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。8.1.1类的定义•类是用户自己指定的类型。如果程序中要用到类类型,必须自己根据需要进行声明,或者使用别人已设计好的类。•在C++中声明一个类类型和声明一个结构体类型是相似的。•下面是声明一个结构体类型的方法:structStudent//声明了一个名为Student的结构体类型{intnum;charname[20];charsex;};Studentstud1,stud2;//定义了两个结构体变量stud1和stud28.1.1类的定义•结构体只包括数据,没有包括操作。现在声明一个类:classStudent//以class开头{intnum;charname[20];charsex;//以上3行是数据成员voiddisplay()//这是成员函数{cout″num:″numendl;cout″name:″nameendl;cout″sex:″sexendl;//以上4行是函数中的操作语句}};Studentstud1,stud2;//定义了两个Student类的对象stud1和stud2•可以看到声明类的方法是由声明结构体类型的方法发展而来的。8.1.1类的定义•可以看到,类(class)就是对象的类型。实际上,类是一种广义的数据类型。类这种数据类型中的数据既包含数据,也包含操作数据的函数。•不能把类中的全部成员与外界隔离,一般是把数据隐蔽起来,而把成员函数作为对外界的接口。•可以将上面类的声明改为:classStudent//声明类类型{private://声明以下部分为私有的intnum;charname[20];charsex;public://声明以下部分为公用的voiddisplay(){cout″num:″numendl;cout″name:″nameendl;cout″sex:″sexendl;}};Studentstud1,stud2;//定义了两个Student类的对象8.1.1类的定义•如果在类的定义中既不指定private,也不指定public,则系统就默认为是私有的。•归纳以上对类类型的声明,可得到其一般形式如下:class类名{private:私有的数据和成员函数;public:公用的数据和成员函数;};8.1.1类的定义•除了private和public之外,还有一种成员访问限定符protected(受保护的),用protected声明的成员称为受保护的成员,它不能被类外访问(这点与私有成员类似),但可以被派生类的成员函数访问。•在声明类类型时,声明为private的成员和声明为public的成员的次序任意,既可以先出现private部分,也可以先出现public部分。如果在类体中既不写关键字private,又不写public,就默认为private。在一个类体中,关键字private和public可以分别出现多次。每个部分的有效范围到出现另一个访问限定符或类体结束时(最后一个右花括号)为止。但是为了使程序清晰,应该养成这样的习惯:使每一种成员访问限定符在类定义体中只出现一次。8.1.2对象的定义1.先声明类类型,然后再定义对象前面用的就是这种方法,如Studentstud1,stud2;//Student是已经声明的类类型在C++中,声明了类类型后,定义对象有两种形式。(1)class类名对象名如classStudentstud1,stud2;把class和Student合起来作为一个类名,用来定义对象。(2)类名对象名如Studentstud1,stud2;直接用类名定义对象。这两种方法是等效的。第1种方法是从C语言继承下来的,第2种方法是C++的特色,显然第2种方法更为简捷方便。8.1.2对象的定义2.在声明类类型的同时定义对象classStudent//声明类类型{public://先声明公用部分voiddisplay(){cout″num:″numendl;cout″name:″nameendl;cout″sex:″sexendl;}private://后声明私有部分intnum;charname[20];charsex;}stud1,stud2;//定义了两个Student类的对象在定义Student类的同时,定义了两个Student类的对象。8.1.2对象的定义3.不出现类名,直接定义对象class//无类名{private://声明以下部分为私有的┆public://声明以下部分为公用的┆}stud1,stud2;//定义了两个无类名的类对象直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。在实际的程序开发中,一般都采用上面3种方法中的第1种方法。在小型程序中或所声明的类只用于本程序时,也可以用第2种方法。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。8.2.1成员函数的定义•类的成员函数(简称类函数)是函数的一种,它的用法和作用和之前介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的)、public(公用的)或protected(受保护的)。在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。例如私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用。8.2.1成员函数的定义•成员函数可以访问本类中任何成员(包括私有的和公用的),可以引用在本作用域中有效的数据。•一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。但应注意,并非要求把所有成员函数都指定为public。有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为private。这种函数的作用是支持其他函数的操作,是类中其他成员的工具函数(utilityfunction),类外用户不能调用这些私有的工具函数。•类的成员函数是类体中十分重要的部分。如果一个类中不包含成员函数,就等同于C语言中的结构体了,体现不出类在面向对象程序设计中的作用。8.2.1成员函数的定义•成员函数可以访问本类中任何成员(包括私有的和公用的),可以引用在本作用域中有效的数据。•一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。但应注意,并非要求把所有成员函数都指定为public。有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为private。这种函数的作用是支持其他函数的操作,是类中其他成员的工具函数(utilityfunction),类外用户不能调用这些私有的工具函数。•类的成员函数是类体中十分重要的部分。如果一个类中不包含成员函数,就等同于C语言中的结构体了,体现不出类在面向对象程序设计中的作用。8.2.1成员函数的定义•在类外定义成员函数:–在前面已经看到成员函数是在类体中定义的。也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。如:classStudent{public:voiddisplay();//公用成员函数原型声明private:intnum;stringname;charsex;//以上3行是私有数据成员};voidStudent∷display()//在类外定义display类函数{cout″num:″numendl;//函数体cout″name:″nameendl;cout″sex:″sexendl;}Studentstud1,stud2;//定义两个类对象8.2.1成员函数的定义•在类外定义成员函数:–注意:在类体中直接定义函数时,不需要在函数名前面加上类名,因为函数属于哪一个类是不言而喻的。但成员函数在类外定义时,必须在函数名前面加上类名,予以限定,“∷”是作用域限定符或称作用域运算符,用它声明函数是属于哪个类的。–如果在作用域运算符“∷”的有类名,或者函数名前面既无类名又无作用域运算符“∷”,如∷display()或display()则表示display函数不属于任何类,这个函数不是成员函数,而是全局函数,即非成员函数的一般普通函数。8.2.1成员函数的定义•在类外定义成员函数:–类函数必须先在类体中作原型声明,然后在类外定义,也就是说类体的位置应在函数定义之前,否则编译时会出错。–虽然函数在类的外部定义,但在调用成员函数时会根据在类中声明的函数原型找到函数的定义(函数代码),从而执行该函数。–在类的内部对成员函数作声明,而在类体外定义成员函数,这是程序设计的一种良好习惯。如果一个函数,其函数体只有2~3行,一般可在声明类时在类体中定义。多于3行的函数,一般在类体内声明,在类外定义。8.2.2使用对象指针•在程序

1 / 52
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功