第11章类和对象课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第11章类和对象课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 对象 课件
- 资源描述:
-
1、第第1111章章 类和对象类和对象11.1 11.1 面向对象的思想面向对象的思想11.2 11.2 面向对象程序设计的基本特点面向对象程序设计的基本特点11.3 11.3 面向对象软件开发的基本过程面向对象软件开发的基本过程11.4 11.4 类和对象类和对象11.5 11.5 构造函数与析构函数构造函数与析构函数11.6 11.6 友元友元11.7 11.7 静态成员静态成员11.8 const11.8 const对象和成员函数对象和成员函数11.9 11.9 应用实例应用实例作业:作业:1010,1313,1414,151511.1 11.1 面向对象的思想面向对象的思想 什么是面向过程
2、?什么是面向对象?什么是面向过程?什么是面向对象?两种不同的思想、方法。两种不同的思想、方法。面向过程的程序设计面向过程的程序设计 用传统程序设计语言进行程序设计时,必须详细地用传统程序设计语言进行程序设计时,必须详细地描述解题的过程。描述解题的过程。程序设计工作主要围绕设计解题程序设计工作主要围绕设计解题过程来进行过程来进行,这种传统的程序设计方法称为面向过,这种传统的程序设计方法称为面向过程的程序设计。程的程序设计。面向过程程序设计面向过程程序设计 特点特点 程序程序处理数据的一系列过程;处理数据的一系列过程;数据与过程分离;数据与过程分离;程序数据结构算法程序数据结构算法 缺点缺点重用性
3、差重用性差维护困难维护困难 面向对象程序设计面向对象程序设计 面向对象程序设计:将面向对象面向对象程序设计:将面向对象方法用于程序设计。方法用于程序设计。出发点与基本原则:出发点与基本原则:模拟人类习惯思维方式,使开发软件的方法尽可能接近人模拟人类习惯思维方式,使开发软件的方法尽可能接近人类认识世界解决问题的方法。类认识世界解决问题的方法。对象作为模块对象作为模块,对象是对客观事物的自然的、直接的对象是对客观事物的自然的、直接的抽象和模拟,包含了数据及对数据的操作。抽象和模拟,包含了数据及对数据的操作。11.2 11.2 面向对象程序设计的基本特点面向对象程序设计的基本特点 封装性封装性将描述
4、对象的数据及处理这些数据的代码集中起将描述对象的数据及处理这些数据的代码集中起来放在对象内部,对象成为独立模块。来放在对象内部,对象成为独立模块。继承性继承性 从已有类从已有类(称为基类称为基类)派生出新类。派生出新类。多态性多态性同一个名字代表不同、但相似的功能。同一个名字代表不同、但相似的功能。11.3 11.3 面向对象软件开发的基本过程面向对象软件开发的基本过程 软件危机促进了软件工程的形成与发展。软件危机促进了软件工程的形成与发展。软件工程:用系统工程学的原理和方法管理软件开发软件工程:用系统工程学的原理和方法管理软件开发过程,开发过程分为分析、设计、编程、测试、维护过程,开发过程分
5、为分析、设计、编程、测试、维护等阶段。等阶段。面向对象的软件工程面向对象的软件工程分析:明确系统必须做什么。分析:明确系统必须做什么。设计:明确软件系统怎么做。设计:明确软件系统怎么做。实现:选用合适的面向对象编程语言,实现设计阶段描述实现:选用合适的面向对象编程语言,实现设计阶段描述的软件系统的各个类模块,并根据类的相互关系集成。的软件系统的各个类模块,并根据类的相互关系集成。测试:发现软件中的错误。测试:发现软件中的错误。维护:在软件交付用户使用期间,对软件所作的修改。维护:在软件交付用户使用期间,对软件所作的修改。11.4 11.4 类和对象类和对象 在面向对象程序设计中,对象是构成程序
6、的模块,即在面向对象程序设计中,对象是构成程序的模块,即程序是由一组对象构成的,对象之间通过消息分工协程序是由一组对象构成的,对象之间通过消息分工协作,共同完成程序的功能。作,共同完成程序的功能。类是面向对象程序设计的核心,是对具有相同属性与类是面向对象程序设计的核心,是对具有相同属性与行为的一组事物的抽象描述。利用类可以把数据和对行为的一组事物的抽象描述。利用类可以把数据和对数据所做的操作组合成一个整体,实现对数据的封装数据所做的操作组合成一个整体,实现对数据的封装和隐藏。和隐藏。类是用户自定义的数据类型,是创建对象的模型。类是用户自定义的数据类型,是创建对象的模型。11.4.1 11.4.
7、1 类的定义类的定义 1格式格式关键字关键字class 类名类名 成员成员1说明;说明;成员成员2说明;说明;成员成员n说明;说明;;类定义体类定义体分号不可缺!分号不可缺!2类的组成成员类的组成成员 数据成员数据成员:变量或对象。变量或对象。基本类型:基本类型:intint、floatfloat、doubledouble、charchar、boolbool复合类型:数组、指针、引用、结构、枚举等复合类型:数组、指针、引用、结构、枚举等成员函数成员函数 对数据成员进行操作。对数据成员进行操作。class Circle private:int radius;public:void setRadi
8、us(int r)radius=r;double area()return 3.14*radius*radius;数据成员数据成员函数成员函数成员1?函数成员函数成员2 在定义一个类时,注意:在定义一个类时,注意:类只是一种自定义数据类型,类中任何成员数据类只是一种自定义数据类型,类中任何成员数据均不能使用关键字均不能使用关键字externextern、autoauto或或registerregister指定其指定其存储类型,也不能初始化。例如:存储类型,也不能初始化。例如:class Circle class Circle int radius=5;/int radius=5;/错误错误 e
9、xtern float pi;/extern float pi;/错误错误 /省略其它成员省略其它成员 ;成员函数可直接使用类中的任一成员。成员函数可直接使用类中的任一成员。类类型与结构体类型相似,结构体类型也可有函类类型与结构体类型相似,结构体类型也可有函数成员,差别在于,类类型的缺省访问权限是数成员,差别在于,类类型的缺省访问权限是privateprivate,结构体类型的缺省访问权限是,结构体类型的缺省访问权限是publicpublic。11.4.2 11.4.2 类成员的访问控制类成员的访问控制 访问权限控制访问权限控制访问权限访问权限private只允许同类的成员函数访问只允许同类的
10、成员函数访问protected允许同类及其派生类的成员函数访问允许同类及其派生类的成员函数访问public允许同一作用域的任何函数访问允许同一作用域的任何函数访问 在定义类时,指定其成员访问权限的原则:在定义类时,指定其成员访问权限的原则:仅供该类的成员函数访问的成员应指定为私有的。仅供该类的成员函数访问的成员应指定为私有的。若定义的成员在派生类中也需经常使用,则应指定若定义的成员在派生类中也需经常使用,则应指定其为保护的。其为保护的。若允许在类外使用成员时,应将其访问权限定义为若允许在类外使用成员时,应将其访问权限定义为公有的。公有的。11.4.3 11.4.3 类的成员函数及重载类的成员函
11、数及重载 成员函数必须在类体内给出原型说明,至于它成员函数必须在类体内给出原型说明,至于它的实现,可以放在类体内,也可以放在类体外。的实现,可以放在类体内,也可以放在类体外。当成员函数所含代码较少时,一般直接在当成员函数所含代码较少时,一般直接在类类中定义中定义该成员函数;该成员函数;当成员函数中所含代码较多时,通常只在类当成员函数中所含代码较多时,通常只在类中进行原型的说明,在中进行原型的说明,在类外类外对函数进行对函数进行定义定义。例:例:class Person class Person char name12;char name12;int age;int age;char sex4;
12、char sex4;public:public:void Print()void Print()coutname,age,sexendl;coutname,age,sexendl;/省略其它成员省略其它成员;在类中定义的在类中定义的成员函数成员函数 在类外定义成员函数时,函数名应该包含:在类外定义成员函数时,函数名应该包含:类名作用域分辩符(类名作用域分辩符(:)原函数名)原函数名 指明该函数是哪个类的成员指明该函数是哪个类的成员class Person char name12;int age;char sex4;public:void Print();/省略其它成员省略其它成员;void P
13、erson:Print()coutname,age,sex-数据成员名数据成员名 对象指针名对象指针名-成员函数名(参数表)成员函数名(参数表)访问对象的成员时,要注意成员的访问权限。访问对象的成员时,要注意成员的访问权限。例:例:#include class Rectangle float length,width;public:float Area()return length*width;float Perimeter()return 2*(length+width);以关键字以关键字classclass定义的类,成员定义的类,成员的缺省访问属性的缺省访问属性为为privatepriva
14、te。void main()Rectangle r;r.width=45;r.length=54.2;coutthe area of rectangle is r.Area()endl;coutthe perimeter of rectangle is r.Perimeter()endl;非法访问非法访问 私有成员!私有成员!#include#includeclass Rectangleclass Rectangle float length,width;float length,width;public:public:void void SetWidthSetWidth(float newW
15、idth)(float newWidth)width=newWidth;width=newWidth;void void SetLengthSetLength(float newLength)(float newLength)length=newLength;length=newLength;float Area()float Area()return length return length*width;width;float Perimeter()float Perimeter()return 2 return 2*(length+width);(length+width);例:例:voi
16、d main()void main()Rectangle r;Rectangle r;/定义对象定义对象 r.r.SetWidthSetWidth(45);(45);r.r.SetLengthSetLength(54.2);(54.2);coutThe area of rectangle is coutThe area of rectangle is r.Area()endl;r.Area()endl;coutThe perimeter of rectangle is coutThe perimeter of rectangle is r.Perimeter()endl;r.Perimeter
17、()endl;11.4.5 11.4.5 对象数组对象数组 若一个数组中每个元素都是同类型的对象,则若一个数组中每个元素都是同类型的对象,则称该数组为对象数组。称该数组为对象数组。定义一维对象数组的格式为:定义一维对象数组的格式为:;例例11.511.5 对象数组的使用。对象数组的使用。#include#include class Circleclass Circle int radius;int radius;public:public:void setRadius(int r)radius=r;void setRadius(int r)radius=r;int getRadius()ret
18、urn radius;int getRadius()return radius;double area()return 3.14 double area()return 3.14*radiusradius*radius;radius;void main()void main()Circle c3;Circle c3;c0.setRadius(6);c1.setRadius(2);c0.setRadius(6);c1.setRadius(2);c2.setRadius(15);c2.setRadius(15);for(int i=0;i3;i+)for(int i=0;i3;i+)coutrad
19、ius:ci.getRadius()coutradius:ci.getRadius(),area:ci.area()endl;,area:ci.area()this-thisthis指针具有如下的缺省说明:指针具有如下的缺省说明:Circle Circle*const this;const this;有时不得不显式使用有时不得不显式使用thisthis指针指针。数据成员名与函数成员的形参同名。数据成员名与函数成员的形参同名。例例:class Name class Name char char*namename;public:public:void SetName(char void SetNa
20、me(char*namename)if(name)if(name)this-this-name=new charstrlen(name)+1;name=new charstrlen(name)+1;strcpy(strcpy(this-this-name,name);name,name);else else this-this-name=NULL;name=NULL;引用对象本身。引用对象本身。例例:class Name class Name char char*name;name;public:public:void CopyName(Name&n)void CopyName(Name&n)
21、if(if(this=&nthis=&n)return;)return;/避免对象自我复制避免对象自我复制 delete name;delete name;if(n.name)if(n.name)name=new charstrlen(n.name)+1;name=new charstrlen(n.name)+1;strcpy(name,n.name);strcpy(name,n.name);else name=NULL;else name=NULL;11.5 11.5 构造函数和析构函数构造函数和析构函数 构造函数和析构函数:类的构造函数和析构函数:类的特殊成员特殊成员。构造函数:构造函数:
22、创建对象,并初始化对象的数据成员。创建对象,并初始化对象的数据成员。析构函数:析构函数:撤销对象,收回它所占内存,及完成其它清理工作。撤销对象,收回它所占内存,及完成其它清理工作。11.5.1 11.5.1 构造函数构造函数 构造函数的定义格式构造函数的定义格式 ClassName(ClassName()/函数体函数体它与所在类同名。它与所在类同名。它不得有返回值,甚至连关键字它不得有返回值,甚至连关键字voidvoid也不许有。也不许有。例:例:class Personclass Person char name12;char name12;int age;int age;char sex4
23、;char sex4;public:public:Person(const charPerson(const char*n,int a,const charn,int a,const char*s)s)strcpy(name,n);strcpy(name,n);age=a;age=a;strcpy(sex,s);strcpy(sex,s);/省略其它成员函数省略其它成员函数;例:例:class Personclass Person char name12;char name12;int age;int age;char sex4;char sex4;public:public:Person(c
24、onst charPerson(const char*n,int a,const char n,int a,const char*s)s);/其它成员函数说明其它成员函数说明;Person:Person(const charPerson:Person(const char*n,int a,const char n,int a,const char*s)s)strcpy(name,n);strcpy(name,n);age=a;age=a;strcpy(sex,s);strcpy(sex,s);也可在类中声明原也可在类中声明原型,在类外定义。型,在类外定义。构造函数的特殊性:构造函数的特殊性:构
25、造函数在定义类对象时由系统自动调用。构造函数在定义类对象时由系统自动调用。例:例:void main()void main()Person p(“Person p(“张三张三”,20,“”,20,“男男”);”);当遇此定义语句时,系统就调用构造函数:当遇此定义语句时,系统就调用构造函数:Person(const char Person(const char*n,int a,const char n,int a,const char*s)s)创建对象创建对象p p,并用实参初始化它的数据成员。,并用实参初始化它的数据成员。构造函数可以重载。构造函数可以重载。例:例:class Point cl
展开阅读全文