C-高级语言程序设计-第七章-类与对象汇总课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C-高级语言程序设计-第七章-类与对象汇总课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计 第七 对象 汇总 课件
- 资源描述:
-
1、C+高级语言程序设计高级语言程序设计第第7 7章章 类与对象类与对象 北京邮电大学信息与通信工程学院北京邮电大学信息与通信工程学院2022-11-141类是实现C+面向对象程序设计的基础。面向对象程序设计的基本特点有:抽象、封装、继承和多态,类把数据和函数封装在一起,是C+封装的基本单元。2022-11-1427.17.1 类和对象的定义类和对象的定义7.27.2 对象的使用对象的使用7.37.3 构造函数构造函数7.47.4 析构函数析构函数 7.5 7.5 类的静态成员类的静态成员 7.67.6 类成员的保护和使用类成员的保护和使用7.7 7.7 运算符重载运算符重载 7.87.8 类的组
2、合类的组合7.9 7.9 应用举例应用举例7.107.10 面向对象分析和设计面向对象分析和设计 第第7 7章章 类与对象类与对象2022-11-143 7.17.1 类和对象的定义类和对象的定义2022-11-1447.17.1 类和对象的定义类和对象的定义一个类表示现实生活中的一类事物,比如“学生”,事物有相应的特征或属性,它们就是类的数据成员;事物可能有行为动作,也可能被某些行为动作所操作,这些都用函数来实现,这些函数和类有着不可分割的关系,是构成类的函数成员,或者叫成员函数。在C+中,类实际上相当于一种用户自定义的数据类型。2022-11-145对象是一类事物中的一个具体的个体。在定义
3、了类类型后,就可以定义该类型的变量,这个变量就称为类的对象(或实例)。所以,从程序设计的角度来看,对象就相当于变量。7.17.1 类和对象的定义类和对象的定义2022-11-146举例:class Student /类的定义private:int id;char20 name;int age;float score;public:void getscore()void printstu();7.17.1 类和对象的定义类和对象的定义2022-11-1471 1、使用、使用类对象类对象如果已经知道某个类的功能和接口函数,就可以使用如果已经知道某个类的功能和接口函数,就可以使用它了。先定义类对象,
4、通过对象调用接口函数实现一它了。先定义类对象,通过对象调用接口函数实现一定的功能。定的功能。class Student stu01;/class也可以省略不写stu01.getscore();stu01.printstu();这个过程的本质是:根据对象所需要完成的任务,向这个过程的本质是:根据对象所需要完成的任务,向对象发送消息。对象收到消息后,调用接口中的相应对象发送消息。对象收到消息后,调用接口中的相应的函数,完成它的功能。对象只需要知道的函数,完成它的功能。对象只需要知道“做什么做什么”,具体工作由成员函数来完成。具体工作由成员函数来完成。2022-11-1482 2、类的声明类的声明类
5、的声明具体说明类的组成,声明类的语法形式为:class 类名称 public:公有成员protect:保护型成员private:私有成员;2022-11-149其中,“成员”既可以是数据成员,也可以是成员函数的原型。数据成员的声明方式与一般变量相同。函数成员是描述类的对象可以进行的操作,一般在类中声明原型,在类声明的外面定义函数的具体实现。关键字public、protect、private说明类成员的访问控制属性。私有(private)成员只允许本类的成员函数来访问;公有(public)成员是类对外的接口,在类声明和类(函数)实现之后,类的对象可以访问公有成员。保护型(protected)成员
6、的可访问性和私有成员的性质相似。2 2、类的声明类的声明2022-11-1410关于访问控制属性,注意:在类声明中,三种访问控制属性,可以按任意次序出现,也可以不出现。public等关键字也可以多次出现,但是一个成员只能具有一种访问控制属性。如果不写访问控制属性关键字,默认的是private。在书写时通常习惯将公有类型放在最前面,这样便于阅读,因为它们是外部访问时所要了解的。一般情况下,一个类的数据成员应该声明为私有成员,这样封装性较好。一个类应该有一些公有的函数成员,作为对外的接口,否则别的代码无法访问类 2 2、类的声明类的声明2022-11-1411类的成员函数描述的是类的行为或操作。函
7、数的原型声明要在类的主体中,原型说明了函数的参数表和返回值类型。而函数的具体实现一般是写在类声明之外的。在类的外部定义成员函数的语法形式为:返回值类型 类名:成员函数名(参数表)函数体 3 3、类的成员函数类的成员函数2022-11-1412如果在类的内部定义成员函数的具体实现,则该成员函数为内联成员函数。函数定义时没有任何的附加说明,所以称为隐式声明的内联成员。3 3、类的成员函数类的成员函数2022-11-1413定义一个对象和定义一个一般变量相同。定义变量时要分配存储空间,同样,定义一个对象时要分配存储空间,一个对象所占的内存空间是类的数据成员所占的空间总和。类的成员函数存放在代码区,不
8、占内存空间。类的成员是抽象的,对象的成员才是具体的。类的数据成员都不会有具体的属性值。只有对象的成员才会有具体的属性值。4 4、对象、对象2022-11-1414声明了类及其对象,在类的外部(指类定义和成员函数的实现代码之外),就可以访问对象的公有成员(包括数据成员和函数成员)了。在类的外部,只能通过对象访问类的公有成员;在类的成员函数内部,可以直接访问类的所有成员,这就实现了对访问范围的有效控制。4 4、对象、对象2022-11-1415类作用域是指类定义和相应的成员函数定义的范围,通俗地称为类的内部。C+认为一个类的全部成员都是一个整体的相关部分。一个类的所有成员位于这个类的作用域内,在该
9、范围内,一个类的成员函数对本类的其它成员具有无限制的访问权。5 5、类的作用域与可见性、类的作用域与可见性2022-11-1416要声明一个时钟类,任何一个时钟都应该有时、分、秒的值,这就是时钟的属性特征;时钟的操作应该有设置时间、显示时间等。6 6、时钟类举例、时钟类举例2022-11-1417/声明时钟类的头文件:声明时钟类的头文件:Clock.hClock.h#include#include using namespace std;using namespace std;class Clockclass Clock/类的声明类的声明public:public:void SetTime(i
10、nt newH=0,int newM=0,int newS=0);void SetTime(int newH=0,int newM=0,int newS=0);void ShowTime();void ShowTime();void ShowTime(int n);void ShowTime(int n);private:private:int Hour;int Hour;int Minute;int Minute;int Second;int Second;6 6、时钟类举例、时钟类举例2022-11-1418/实现类成员函数的源文件:实现类成员函数的源文件:Clock.cppClock.c
11、pp#include Clock.h#include Clock.hvoid Clock:SetTime(int newH,int newM,int newS)void Clock:SetTime(int newH,int newM,int newS)/SetTime()/SetTime()函数定义函数定义 Hour=newH;Hour=newH;Minute=newM;Minute=newM;Second=newS;Second=newS;void Clock:ShowTime()void Clock:ShowTime()/ShowTime()/ShowTime()函数定义函数定义 cout
12、Hour:Minute:Secondendl;coutHour:Minute:Secondendl;void Clock:ShowTime(int n)void Clock:ShowTime(int n)/重载函数的定义重载函数的定义 coutHour coutHour点点MinuteMinute分分SecondSecond秒秒endl;公有成员;例如:Clock c;/在栈中分配Clock型存储空间Clock*pc1=new Clock;/在堆中分配Clock型存储空间Clock*pc2=&c;pc1-SetTime(12,5,0);2022-11-14231 1、对象、对象指针指针/使用对
13、象指针和堆对象对例使用对象指针和堆对象对例7-17-1中的主函数进行修改中的主函数进行修改void main()void main()Clock Clock*pmyclock=new Clock;pmyclock=new Clock;pmyclock-SetTime(12,5,0);pmyclock-SetTime(12,5,0);pmyclock-ShowTime();pmyclock-ShowTime();delete pmyclock;delete pmyclock;2022-11-14242 2、thisthis指针指针问:一个类中所有对象调用的成员函数都执行同一段代码。那么,成员函数
14、又是怎么识别当前是那个对象在访问呢?答:this指针指出了成员函数当前所操作的数据所属的对象。不同的对象调用成员函数时,this指针将指向不同的对象,也就可以访问不同对象的数据成员。2022-11-14253 3、对象数组、对象数组对象数组的元素是对象,不仅具有数据成员,而且还有函数成员,可以通过数组元素调用成员函数。2022-11-14263 3、对象数组、对象数组/例例7-3 7-3 使用对象数组使用对象数组#include#include#include#include#include#include using namespace std;using namespace std;cla
15、ss studentclass student private:private:int id;int id;string name;string name;int age;int age;float score;float score;public:public:void set(int,char void set(int,char*,int,float);,int,float);void printstu()void printstu()cout cout学号:学号:id id 姓名:姓名:setw(5)name;setw(5)name;cout cout 年龄:年龄:age age 成绩:
16、成绩:scoreendl;scoreendl;/student;/student类声明结束类声明结束 2022-11-14273 3、对象数组、对象数组void student:set(int i,charvoid student:set(int i,char*c,int a,float s)c,int a,float s)id=i;id=i;name=c;name=c;age=a;age=a;score=s;score=s;void main()void main()student stu5;student stu5;/对象数组对象数组 stu0.set(1,wang,18,86);stu0
17、.set(1,wang,18,86);/设置数组中每个对象设置数组中每个对象 stu1.set(2,Li,18,72);stu1.set(2,Li,18,72);stu2.set(3,zhao,18,80);stu2.set(3,zhao,18,80);stu3.set(4,guo,18,85);stu3.set(4,guo,18,85);stu4.set(5,meng,18,75);stu4.set(5,meng,18,75);for(int i=0;i5;i+)for(int i=0;i5;i+)stui.printstu();stui.printstu();/显示每个对象显示每个对象 2
18、022-11-14284 4、对象用做函数的参数和返回值、对象用做函数的参数和返回值可以将对象作为参数传递给一个函数或从函数返回一个对象。直接用对象作为参数,调用函数时,进行值传递,实参的值要复制给形参,如果类的数据成员较多时,需要一一复制,这种参数传递方式效率不高,可以使用对象指针或对象引用方式来传递函数参数。2022-11-14294 4、对象用做函数的参数和返回值、对象用做函数的参数和返回值/例例7-47-4:使用对象传递函数参数:使用对象传递函数参数/Tdate.h/Tdate.h:TdateTdate类声明类声明#include#include using namespace std
19、;using namespace std;class Tdateclass Tdatepublic:public:void Set(int,int,int);void Set(int,int,int);/成员函数声明成员函数声明 int IsLeapYear();int IsLeapYear();void Print();void Print();private:private:int month;int month;int day;int day;int year;int year;2022-11-14304 4、对象用做函数的参数和返回值、对象用做函数的参数和返回值/例例7-47-4:使用
20、对象传递函数参数:使用对象传递函数参数/Tdate.cpp/Tdate.cpp:TdateTdate类成员函数实现类成员函数实现#include Tdate.h#include Tdate.hvoid Tdate:Set(int m,int d,int y)void Tdate:Set(int m,int d,int y)month=m;day=d;year=y;month=m;day=d;year=y;int Tdate:IsLeapYear()int Tdate:IsLeapYear()return(year%4=0&year%100!=0)|(year%400=0);return(yea
21、r%4=0&year%100!=0)|(year%400=0);void Tdate:Print()void Tdate:Print()cout month/day/year endl;cout month/day/year endl;2022-11-14314 4、对象用做函数的参数和返回值、对象用做函数的参数和返回值/例例7-47-4:使用对象传递函数参数:使用对象传递函数参数/例例7-47-4的应用程序:的应用程序:7-4.cpp7-4.cpp#include#include using namespace std;using namespace std;#include Tdate.h
22、#include Tdate.hvoid someFunc(Tdate someday)/void someFunc(Tdate someday)/普通函数的参数是一个类对象普通函数的参数是一个类对象 someday.Print();someday.Print();if(someday.IsLeapYear()if(someday.IsLeapYear()cout leap yearn;cout leap yearn;else else cout not leap yearn;cout not leap yearn;void main()void main()Tdate s;Tdate s;s
23、.Set(2,15,2003);s.Set(2,15,2003);someFunc(s);/someFunc(s);/对象作为函数参数对象作为函数参数 2022-11-14324 4、对象用做函数的参数和返回值、对象用做函数的参数和返回值/例例7-57-5:使用对象指针传递函数参数:使用对象指针传递函数参数/例例7-57-5的应用程序:的应用程序:7-5.cpp7-5.cpp#include#include using namespace std;using namespace std;#include Tdate.h#include Tdate.h/包含包含Tdate.hTdate.h头文件
24、头文件void someFunc(Tdatevoid someFunc(Tdate*pS)pS)/对象指针作为函数形参对象指针作为函数形参 pS-Print();pS-Print();/pS/pS是是s s对象的指针对象的指针 if(pS-IsLeapYear()if(pS-IsLeapYear()cout leap yearn;cout leap yearn;else else cout not leap yearn;cout not leap yearn;void main()void main()Tdate s;Tdate s;s.Set(2,15,2003);s.Set(2,15,20
25、03);someFunc(&s);/someFunc(&s);/对象的地址作为实参对象的地址作为实参 2022-11-14334 4、对象用做函数的参数和返回值、对象用做函数的参数和返回值/例例7-77-7:使用对象的引用作为函数的返回值:使用对象的引用作为函数的返回值#include#include using namespace std;using namespace std;class Rectangleclass Rectangle private:private:float width,height;float width,height;public:public:void SetR
展开阅读全文