第二章类与对象优秀课件.ppt

上传人:石*** 文档编号:53982304 上传时间:2022-10-27 格式:PPT 页数:185 大小:5.03MB
返回 下载 相关 举报
第二章类与对象优秀课件.ppt_第1页
第1页 / 共185页
第二章类与对象优秀课件.ppt_第2页
第2页 / 共185页
点击查看更多>>
资源描述

《第二章类与对象优秀课件.ppt》由会员分享,可在线阅读,更多相关《第二章类与对象优秀课件.ppt(185页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第二章类与对象第二章类与对象第1页,本讲稿共185页本章主要内容本章主要内容l面向对象的思想面向对象的思想l类概念和声明类概念和声明l类的成员类的成员l构造函数与析构函数构造函数与析构函数l用用const保护数据保护数据l友元友元l静态成员静态成员lthis指针指针第2页,本讲稿共185页l重点重点:根据具体问题的算法编写程序,重点考虑本根据具体问题的算法编写程序,重点考虑本问题的解决方法和流程问题的解决方法和流程l形式:形式:主模块主模块+若干个子模块(若干个子模块(main()+子函数)。子函数)。每个函数实现一项功能每个函数实现一项功能l特点:特点:设计者必须考虑每一个细节设计者必须考虑

2、每一个细节数据与函数分离,所有数据都是公用的。数据与函数分离,所有数据都是公用的。面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第3页,本讲稿共185页l缺点:缺点:数据与代码分离导致数据改变时需重新编写函数数据与代码分离导致数据改变时需重新编写函数程序功能扩充时程序的可重用性差,效率低。程序功能扩充时程序的可重用性差,效率低。面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计主函数主函数函数函数1函数函数2函数函数3函数函数11函数函数12函数函数31函数函数32数据数据1数据数据2数据数据3第4页,本讲稿共185页l例例:编写小型公司人员信息管理系统编写小型公司人员

3、信息管理系统某小型公司主要有人员,经理、兼职技术人某小型公司主要有人员,经理、兼职技术人员、销售经理和兼职推销员。现在需要存储员、销售经理和兼职推销员。现在需要存储这些人员的姓名、编号、级别、当月薪水、这些人员的姓名、编号、级别、当月薪水、计算月薪总额并显示全部信息。计算月薪总额并显示全部信息。月薪计算方法:月薪计算方法:经理经理拿固定月薪拿固定月薪8000元元兼职兼职技术人员技术人员按每小时按每小时100元领取月薪兼职推销员元领取月薪兼职推销员月薪按当月销售额的月薪按当月销售额的4%提成提成销售经理销售经理既拿固既拿固定月薪也领取销售提成,固定月薪为定月薪也领取销售提成,固定月薪为5000元

4、,元,销售提成为所管辖部门当月销售额的销售提成为所管辖部门当月销售额的5。面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第5页,本讲稿共185页l分析:分析:一般数据描述用结构体一般数据描述用结构体structemployeechar*name;/姓名姓名intno;/编号编号char*job;/职位职位floatpaytotal;/月薪总额月薪总额floathourlyRate;/每小时酬金每小时酬金intworkHours;/当月工作时数当月工作时数floatCommRate;/销售额提取百分比销售额提取百分比floatsales;/当月销售额当月销售额不同职位月薪计算方法和

5、需要数据个数不同,专用与公用数不同职位月薪计算方法和需要数据个数不同,专用与公用数据混杂据混杂,数据结构过于庞大数据结构过于庞大,结构不清结构不清面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第6页,本讲稿共185页l程序结构:程序结构:函数:函数:Eemployee*input()输入全部数据输入全部数据必须输入全部数据,即使不使用的部分专有数据也不例外,必须输入全部数据,即使不使用的部分专有数据也不例外,且输入顺序要与数据文件顺序匹配且输入顺序要与数据文件顺序匹配E月薪计算函数月薪计算函数pay利用函数重载编写各类人员月薪计算函数利用函数重载编写各类人员月薪计算函数pay,这

6、样主函,这样主函数中必须要有相应分支结构,按职位调用相应数中必须要有相应分支结构,按职位调用相应pay函数函数Evoidoutput(employeeperson)输出全部数据输出全部数据除输出公用数据外除输出公用数据外,其中应有分支结构,根据职位不同输其中应有分支结构,根据职位不同输出其专有数据。如:兼职技术人员要输出每小时薪金数及出其专有数据。如:兼职技术人员要输出每小时薪金数及小时数等信息小时数等信息面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第7页,本讲稿共185页l分析:分析:修改:修改:E添加钟点工:添加钟点工:4小时以内每小时小时以内每小时5元,元,4小时以上每小

7、时以上每小时小时8元。元。E程序修改范围:添加程序修改范围:添加pay函数,修改所有其他函数函数,修改所有其他函数包括包括main函数包括数据文件函数包括数据文件l结论:结论:面向过程的程序设计在程序的通用性、扩展面向过程的程序设计在程序的通用性、扩展性方面存在缺陷。性方面存在缺陷。面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第8页,本讲稿共185页2.1 面向对象程序设计面向对象程序设计l观点:观点:从程序的通用性入手,将程序潜在使用者作为对象从程序的通用性入手,将程序潜在使用者作为对象进行全面研究。认为所有问题由彼此相关且能够相进行全面研究。认为所有问题由彼此相关且能够相互

8、通信的实体(对象)所组成,并总结出对象的共互通信的实体(对象)所组成,并总结出对象的共性特点。性特点。例:公司:问题。公司中的一个人员:对象。例:公司:问题。公司中的一个人员:对象。l特点:特点:每个对象都有自己的特征每个对象都有自己的特征(对象的属性对象的属性)(数据数据)每个对象都有自己的行为。每个对象都有自己的行为。(操作操作)例:王经理有自己的编号、月薪等数据属性和自己的行为:月例:王经理有自己的编号、月薪等数据属性和自己的行为:月薪计算函数薪计算函数l要求:要求:高度概括、分类、和抽象现实问题。高度概括、分类、和抽象现实问题。将数据与对数据进行的操作封装。将数据与对数据进行的操作封装

9、。面向对象的思想第9页,本讲稿共185页l抽象:抽象:将研究对象(问题)分类并总结将研究对象(问题)分类并总结出每类对象的公共性质并加以描述出每类对象的公共性质并加以描述将具有相同结构和特性的一批对象总结出将具有相同结构和特性的一批对象总结出来用来用“类类”这种数据结构描述,称为这种数据结构描述,称为对象对象的抽象的抽象数据抽象数据抽象:总结出同类对象的基本特点:总结出同类对象的基本特点(属性)用物理量(变量等)描述(属性)用物理量(变量等)描述代码抽象:总结出同类对象的共有的行为代码抽象:总结出同类对象的共有的行为特征(操作或具有的功能),编写相应专特征(操作或具有的功能),编写相应专用函数

10、用函数E例:编写兼职技术人员的月薪计算函数例:编写兼职技术人员的月薪计算函数2.1 面向对象程序设计面向对象程序设计面向对象的基本特点第10页,本讲稿共185页l封装封装:将数据和操作放在一起,视为一个整:将数据和操作放在一起,视为一个整体称为体称为类类,与外界相对分隔。,与外界相对分隔。面向对象的基本特点2.1 面向对象程序设计面向对象程序设计类类数据数据操作代码操作代码l例:兼职技术人员例:兼职技术人员特有数据:每小时薪金数和月工作时间特有数据:每小时薪金数和月工作时间特有代码:求月薪函数特有代码:求月薪函数封装成:技术人员类封装成:技术人员类第11页,本讲稿共185页2.1 面向对象程序

11、设计面向对象程序设计l例:兼职技术人员的封装例:兼职技术人员的封装classtechnician:publicemployee/技术人员类技术人员类private:floathourlyRate;/每小时酬金每小时酬金intworkHours;/当月工作时数当月工作时数public:voidpay()/计算月薪函数计算月薪函数cinworkHours;accumPay=hourlyRate*workHours;第12页,本讲稿共185页2.1 面向对象程序设计面向对象程序设计l封装封装特点:特点:数据只能在内部使用,外界及其他类只能数据只能在内部使用,外界及其他类只能通过程序接口联系,可以保护

12、数据通过程序接口联系,可以保护数据使用者不必了解具体的实现细节,只通过使用者不必了解具体的实现细节,只通过外部接口以特定的访问权限,使用类的成外部接口以特定的访问权限,使用类的成员员程序扩充功能时可直接编写新的封装模块,程序扩充功能时可直接编写新的封装模块,设计接口接入程序即可设计接口接入程序即可面向对象的基本特点第13页,本讲稿共185页2.1 面向对象程序设计面向对象程序设计l继承与派生:继承与派生:在一个类基础上可派生出新的类在一个类基础上可派生出新的类新类继承原类的所有成员并可产生新的功新类继承原类的所有成员并可产生新的功能能实际操作时通常将所有对象共用的数据及实际操作时通常将所有对象

13、共用的数据及操作作为基础类,不同对象专有数据都从操作作为基础类,不同对象专有数据都从基类中基类中派生派生得出得出面向对象的基本特点第14页,本讲稿共185页面向对象的基本特点2.1 面向对象程序设计面向对象程序设计基类公共数据公共数据操作代码操作代码经理数据数据操作代码操作代码技术人员数据数据操作代码操作代码销售人员数据数据操作代码操作代码钟点工数据数据操作代码操作代码第15页,本讲稿共185页2.1 面向对象程序设计面向对象程序设计l面向对象程序设计总结:面向对象程序设计总结:抽象:将对象分类,并总结同类对象的数抽象:将对象分类,并总结同类对象的数据属性和相应代码(函数)据属性和相应代码(函

14、数)封装:将同类对象所属数据及函数封装在封装:将同类对象所属数据及函数封装在一个类中一个类中派生:类复杂时,将许多类的共同属性及派生:类复杂时,将许多类的共同属性及代码用一个公用类(基类)封装,自己类代码用一个公用类(基类)封装,自己类的特有属性及代码用从公用类派生出的派的特有属性及代码用从公用类派生出的派生类封装生类封装第16页,本讲稿共185页2.2 类与对象的定义类与对象的定义第二章类和对象第17页,本讲稿共185页l类是一种用户自定义类型,它是从结构体引申而来:类是一种用户自定义类型,它是从结构体引申而来:structstudentintnum;charname10;intscore;

15、studentstu,stu2;结构体只包括数据,没有操作,结构体成员在结构体只包括数据,没有操作,结构体成员在本作用域中是本作用域中是“敞开敞开”的,使用不受限制的,使用不受限制2.2 类与对象的定义类与对象的定义类类的的引引入入结结构构体体扩扩展展第18页,本讲稿共185页2.2 类与对象的定义类与对象的定义l结构体成员在任何函数中均可用直接使用结构体成员在任何函数中均可用直接使用格式:格式:结构体变量名结构体变量名.成员名成员名voidmain()/no2.2-1.cpp studentstu;cinstu.numstu.namestu.score;display(stu);voiddi

16、splay(studentstu)coutstu.numstu.namestu.scoreendl;类类的的引引入入结结构构体体扩扩展展第19页,本讲稿共185页l结构体类型的扩展在定义中加入代码(函数)结构体类型的扩展在定义中加入代码(函数):structstudentintnum;charname10;intscore;voiddisplay()coutnum:numendl;coutname:nameendl;coutscore:scoreendl;2.2 类与对象的定义类与对象的定义数据成员数据成员函数成员函数成员(代码代码)扩展的结构体扩展的结构体student实现了将数据与对此数据

17、进实现了将数据与对此数据进行的操作封装在一起的功能行的操作封装在一起的功能类类的的引引入入结结构构体体扩扩展展数据是内部成员,直接使用数据是内部成员,直接使用第20页,本讲稿共185页l封装后的结构体仍然开放,所有成员均可直接使用,封装后的结构体仍然开放,所有成员均可直接使用,但须按格式使用包括函数成员。但须按格式使用包括函数成员。voidmain()/no2.2-1A.cppstudentstu;coutstu.numstu.namestu.score;stu.display();l封装后的结构体仍然开放,所有成员均可直接使用封装后的结构体仍然开放,所有成员均可直接使用2.2 类与对象的定义

18、类与对象的定义类类的的引引入入结结构构体体扩扩展展第21页,本讲稿共185页l为保护专有数据兼顾外界使用,设置访问权限,为保护专有数据兼顾外界使用,设置访问权限,让专有成员只能内部使用,公开成员则任意使用让专有成员只能内部使用,公开成员则任意使用stuctstudentprivate:intnum;charname10;charsex;public:voiddisplay()coutnum:numendl;coutname:nameendl;coutsex:sexendl;2.2 类与对象的定义类与对象的定义私有成员,只能内部使用私有成员,只能内部使用公有成员,外界可以调用公有成员,外界可以调

19、用类类的的引引入入结结构构体体扩扩展展第22页,本讲稿共185页l设置访问权限后,主函数作为外部,只能使用公有设置访问权限后,主函数作为外部,只能使用公有成员。成员。voidmain()studentstu;coutstu.numstu.namestu.score;stu.display();2.2 类与对象的定义类与对象的定义类类的的引引入入结结构构体体扩扩展展正确:公有函数可以使用正确:公有函数可以使用错误:私有成员不可使用错误:私有成员不可使用第23页,本讲稿共185页l解决方案:绕弯使用,增加公有成员函数间接使解决方案:绕弯使用,增加公有成员函数间接使用内部成员用内部成员structs

20、tudentprivate:intnum;charname10;charsex;public:voidinput()coutnumnamescore;voiddisplay()coutnum:numendl;coutname:nameendl;coutsex:sexendl;类类的的引引入入结结构构体体扩扩展展为外部使用增加的公有函数为外部使用增加的公有函数 前一页 下一页第24页,本讲稿共185页l主函数通过公有函数主函数通过公有函数input间接使用内部成员间接使用内部成员voidmain()/no2.2-1B.cppstudentstu;stu.input();stu.display()

21、;2.2 类与对象的定义类与对象的定义类类的的引引入入结结构构体体扩扩展展注意:必须用注意:必须用“变量名变量名.函数名函数名”的格式的格式使用使用第25页,本讲稿共185页2.2 类与对象的定义类与对象的定义l总结:总结:通过扩展结构体数据类型,增加函数成员通过扩展结构体数据类型,增加函数成员和访问权限,使结构体实现了面向对象程和访问权限,使结构体实现了面向对象程序设计中的封装序设计中的封装为更好进行面向对象程序设计,将扩展的为更好进行面向对象程序设计,将扩展的结构体类型改造产生新的数据类型结构体类型改造产生新的数据类型类类类和结构体有着相似的结构,但更为复杂,类和结构体有着相似的结构,但更

22、为复杂,功能更加扩展,能够实现更加复杂的面向功能更加扩展,能够实现更加复杂的面向对象的程序设计对象的程序设计类类的的引引入入结结构构体体扩扩展展第26页,本讲稿共185页l类的一般声明形式:类的一般声明形式:class类名称类名称private:私有数据和成员函数私有数据和成员函数protected:保护型数据和成员函数保护型数据和成员函数public:公有数据和成员函数公有数据和成员函数;类类的的定定义义2.2 类与对象的定义类与对象的定义类关键字类关键字成员定义成员定义访问权限访问权限第27页,本讲稿共185页2.2 类与对象的定义类与对象的定义l例例:classABCprivate:in

23、ta;protected:intb;voidset(intx,inty,intz)a=x;b=y;c=z;public:intc;voidprint()coutabcendl;l私有成员:变量私有成员:变量al保护成员:变量保护成员:变量b及函数及函数setl公有成员:变量公有成员:变量c及函数及函数print类类的的声声明明形形式式第28页,本讲稿共185页l公有权限:在关键字公有权限:在关键字public后面声明,是后面声明,是类与外部的接口,任何外部函数都可以访问。类与外部的接口,任何外部函数都可以访问。l私有权限:在关键字私有权限:在关键字private后面声明,后面声明,只只允许本类

24、中的函数访问,而类外部的任何函允许本类中的函数访问,而类外部的任何函数都不能访问。数都不能访问。l如果如果紧跟在类名称的后面声明私有成员,则紧跟在类名称的后面声明私有成员,则关键字关键字private可以可以省略。省略。类类的的访访问问权权限限2.2 类与对象的定义类与对象的定义第29页,本讲稿共185页l在关键字在关键字protected后面声明后面声明,与,与private类似,其差别表现在继承与派生类似,其差别表现在继承与派生时对派生类的影响不同。时对派生类的影响不同。2.2 类与对象的定义类与对象的定义类类的的访访问问权权限限第30页,本讲稿共185页classABCinta;prot

25、ected:intb;public:intc;voidset(intx,inty,intz)a=x;b=y;c=z;voidprint()couta=anb=bnc=cendl;注意:内部函数可以使用全部数据成员而外部(如主注意:内部函数可以使用全部数据成员而外部(如主函数中函数中)只能使用公有数据成员只能使用公有数据成员c及公有函数成员及公有函数成员set和和print且必须通过且必须通过对象对象使用使用不不同同权权限限的的成成员员例例 前一页 下一页 休息 休息默认权限为默认权限为private第31页,本讲稿共185页2.2 类与对象的定义类与对象的定义l类的对象是该类的某一特定实体,即

26、类类的对象是该类的某一特定实体,即类类型的变量类型的变量l定义形式:定义形式:存储类型存储类型类名类名对象名对象名;l举例:举例:ABCd1;l定义的三种方式:定义的三种方式:先定义类,后定义对象;先定义类,后定义对象;定义类的同时,定义对象;定义类的同时,定义对象;无类名,直接定义对象无类名,直接定义对象对对象象的的定定义义第32页,本讲稿共185页2.2 类与对象的定义类与对象的定义l对象与结构体变量一样,一般不能整体对象与结构体变量一样,一般不能整体使用,只能使用成员使用,只能使用成员l一般格式:一般格式:对象名对象名.成员名成员名上例:如已有定义:上例:如已有定义:ABCd1;则:则:

27、d1.c=28;d1.set(1,2,3);都是正确的对象使用都是正确的对象使用对对象象的的使使用用 定义第33页,本讲稿共185页2.2 类与对象的定义类与对象的定义l对象的位置在类外,因此不是所有类的对象的位置在类外,因此不是所有类的成员都能通过对象使用,它受到访问成员都能通过对象使用,它受到访问权限的限制。权限的限制。l只有只有public属性的成员可以通过对象在属性的成员可以通过对象在类外使用类外使用例:例:coutd1.cendl;coutd1.ad1.bendl;对对象象的的使使用用 定义第34页,本讲稿共185页2.2 类与对象的定义类与对象的定义l提醒:类中的成员函数要使用数据

28、成员提醒:类中的成员函数要使用数据成员时不受访问权限的限制时不受访问权限的限制l使用方法:直接使用成员名使用方法:直接使用成员名例:例:ABC类的成员函数类的成员函数set中:中:a=x;b=y;c=z;其中其中a、b是禁止外界使用的私有和保护是禁止外界使用的私有和保护成员,而成员,而c是任意使用的公有成员是任意使用的公有成员对对象象的的使使用用 定义第35页,本讲稿共185页l例:不同类型成员的使用例:不同类型成员的使用classABCinta;protected:intb;public:intc;voidset(intx,inty,intz)a=x;b=y;c=z;voidprint()c

29、outa=anb=bnc=cendl;类类中中成成员员的的访访问问实实例例 前一页 下一页 休息 休息类中访问直接用成员名且不受权限限制类中访问直接用成员名且不受权限限制第36页,本讲稿共185页voidmain()/no2.2-2.cppintx,y,z;ABCabc;abc.c=10;/类外访问:公有成员直接引用类外访问:公有成员直接引用abc.a=5;abc.b=8;/私有及保护成员不能直接引用私有及保护成员不能直接引用/私有及保护成员只能通过公有成员函数引用私有及保护成员只能通过公有成员函数引用coutxyz;abc.set(x,y,z);abc.print();类中成员的访问方式 前

30、一页 休息 休息 下一页第37页,本讲稿共185页l成员函数:成员函数:成员函数可是带缺省形参值的函数。成员函数可是带缺省形参值的函数。成员函数可以重载成员函数可以重载成员函数较长时可写在类定义外面成员函数较长时可写在类定义外面此时函数首行形式为:此时函数首行形式为:函数类型函数类型类名类名:函数名函数名(形参表形参表)成成员员函函数数的的特特殊殊性性成员函数的变化成员函数的变化实实例例例例1 1实实例例例例2 2实实例例例例3 3第40页,本讲稿共185页类的应用举例类的应用举例一圆型游泳池如图所示,现在需在其周围建一一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏

31、价格为圆型过道,并在其四周围上栅栏。栅栏价格为35元元/米,过道造价为米,过道造价为20元元/平方米。过道宽度为平方米。过道宽度为3米,游米,游泳池半径由键盘输入。要求编程计算并输出过道和泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。栅栏的造价。游泳池过道第51页,本讲稿共185页类的应用举例类的应用举例l分析:分析:算法:算法:E栅栏造价栅栏造价=单价单价大圆周长大圆周长E过道造价过道造价=单价单价(大圆面积大圆面积小圆面积小圆面积)数据结构:数据结构:E反复进行圆计算,考虑定义圆类反复进行圆计算,考虑定义圆类CirleE数据成员:小圆半径:数据成员:小圆半径:floatradiu

32、s;大圆半径比小圆固定大大圆半径比小圆固定大3,直接运算,直接运算造价和单价与圆无关不编入圆类造价和单价与圆无关不编入圆类E函数成员函数成员voidInit(floatr):为半径赋值:为半径赋值floatCircumference():求圆周长求圆周长floatArea():求圆面积:求圆面积第52页,本讲稿共185页#include/no2.2-6.cppconstfloatPI=3.14159;constfloatFencePrice=35;constfloatConcretePrice=20;/声明类声明类Circle及其数据和方法及其数据和方法classCircleprivate:f

33、loatradius;public:voidInit(floatr);/赋值函数赋值函数floatCircumference();/圆周长圆周长floatArea();/圆面积圆面积;下一页 前一页 休息 休息第53页,本讲稿共185页/类的实现类的实现/为数据成员为数据成员radius赋值赋值voidCircle:Init(floatr)radius=r;/计算圆的周长计算圆的周长floatCircle:Circumference()return2*PI*radius;/计算圆的面积计算圆的面积floatCircle:Area()returnPI*radius*radius;下一页 前一页

34、休息 休息第54页,本讲稿共185页voidmain()floatradius;floatFenceCost,ConcreteCost;/提示用户输入半径提示用户输入半径 coutradius;/声明声明Circle对象并赋值对象并赋值 CirclePool,PoolRim;Pool.Init(radius);PoolRim.Init(radius+3);前一页 下一页 休息 休息第55页,本讲稿共185页/计算栅栏造价并输出计算栅栏造价并输出FenceCost=PoolRim.Circumference()*FencePrice;coutFencingCostis¥FenceCostendl

35、;/计算过道造价并输出计算过道造价并输出ConcreteCost=(PoolRim.Area()-Pool.Area()*ConcretePrice;coutConcreteCostis¥ConcreteCostendl;运行结果运行结果Entertheradiusofthepool:10FencingCostis¥2858.85ConcreteCostis¥4335.39 前一页 下一页 休息 休息第56页,本讲稿共185页2.3 组合类组合类第二章类和对象的定义第57页,本讲稿共185页2.3 组合类组合类l类中的成员数据是另一个类的对象时称此类为组类中的成员数据是另一个类的对象时称此类为

36、组合类合类l必须用已有对象为组合类中的对象成员赋值必须用已有对象为组合类中的对象成员赋值l使用对象成员时因其在类外,要受访问权限控使用对象成员时因其在类外,要受访问权限控制制类的组合概念第58页,本讲稿共185页2.3 组合类组合类classPoint/普通类普通类public:voidInit(intxx=0,intyy=0)/设置函数设置函数X=xx;Y=yy;intGetX()returnX;/取取X的值的值intGetY()returnY;/取取Y的值的值private:intX,Y;类的组合举例第59页,本讲稿共185页classDistance/组合类组合类public:voidS

37、et(Pointxp1,Pointxp2);/设置函设置函数数doubleGetDis();/求距离求距离private:Pointp1,p2;/Point类对象,两端点坐标类对象,两端点坐标doubledist;/两点间距离两点间距离;下一页 前一页 休息 休息形参是其他类对象形参是其他类对象第60页,本讲稿共185页voidDistance:Set(Pointxp1,Pointxp2)p1=xp1;/同类对象可直接赋值同类对象可直接赋值p2=xp2;/形参对象赋值给成员对象形参对象赋值给成员对象doubleDistance:GetDis()doublex,y;x=double(p1.Get

38、X()-p2.GetX();y=double(p1.GetY()-p2.GetY();dist=sqrt(x*x+y*y);returndist;下一页 前一页 休息 休息现在位置是现在位置是Point类外,须类外,须通过对象名使用成员,且通过对象名使用成员,且只能使用公有成员函数只能使用公有成员函数本类成员直接使用本类成员直接使用第61页,本讲稿共185页voidmain()/no2.3-1.cppPointmyp1,myp2;myp1.Init(1,1);myp2.Init(4,5);/为为Point类对象赋值类对象赋值Distancemyd;myd.Set(myp1,myp2);/为为D

39、istance类对象赋值类对象赋值coutThedistanceis:;coutmyd.GetDis()endl;下一页 前一页 休息 休息结果为:结果为:Thedistanceis:5第62页,本讲稿共185页2.4 构造函数构造函数第二章类和对象的定义第65页,本讲稿共185页2.4 构造函数构造函数l构造函数是一种特殊的类成员函数构造函数是一种特殊的类成员函数l构造函数的作用构造函数的作用初始化初始化对象中的数据成员对象中的数据成员l特点:特点:构造构造函数名函数名必须与类名相同。必须与类名相同。构造函数构造函数无返回值无返回值且不必用类型名且不必用类型名void构构造造函函数数概概念念

40、第66页,本讲稿共185页构造函数举例构造函数举例#include/no2.4-1.cppclassPointpublic:Point(inta,intb)/构造函数,给对象赋初值构造函数,给对象赋初值X=a;Y=b;voidInit(intinitX,intinitY)/赋值函数,修改对象值赋值函数,修改对象值X=initX;Y=initY;intGetX()returnX;/取取X值函数值函数intGetY()returnY;/取取Y值函数值函数private:intX,Y;构构造造函函数数举举例例函数名与类名相同且无类型名函数名与类名相同且无类型名第67页,本讲稿共185页2.4 构造函

41、数构造函数l对象定义另一格式:对象定义另一格式:类名对象名(实参表)类名对象名(实参表)例:例:PointP1(1,2)定义对象定义对象P1,且为其两个数据成员,且为其两个数据成员X、Y分别赋初值分别赋初值1和和2l构造函数的调用方法:构造函数的调用方法:创建对象时用户给定实参,创建对象时用户给定实参,由系统自动由系统自动调用调用构构造造函函数数的的调调用用第68页,本讲稿共185页构造函数举例构造函数举例intmain()PointA(1,2);/定义对象定义对象A,同时系,同时系统自动调用构造函数为统自动调用构造函数为A赋初值赋初值coutA.GetX()tA.GetY()endl;ret

42、urn0;构构造造函函数数举举例例执行结果:执行结果:12第69页,本讲稿共185页2.4 构造函数构造函数l构造函数可以构造函数可以有参亦可无参有参亦可无参上例:如上例:如X、Y默认初值为默认初值为0,则构造函,则构造函数可为:数可为:Point()X=Y=0;对应对象定义:对应对象定义:PointA注意:不可带实参,也不必带括号注意:不可带实参,也不必带括号构构造造函函数数特特性性第70页,本讲稿共185页2.4 构造函数构造函数l程序可不定义构造函数,此时系统自程序可不定义构造函数,此时系统自动产生一个动产生一个默认默认的构造函数,为无参的构造函数,为无参空函数。空函数。上例,系统自动定

43、义的构造函数为:上例,系统自动定义的构造函数为:Point()l构造函数允许为构造函数允许为内联函数内联函数、重载函数重载函数、带默认形参值带默认形参值的函数。的函数。构构造造函函数数特特性性第71页,本讲稿共185页l实例:定义一个时间类,并测试实例:定义一个时间类,并测试/no2.4-2.cppclassTimepublic:Time();/重载构造函数重载构造函数Time(intNewH,intNewM,intNewS);voidSetTime(intNewH,intNewM,intNewS);/设置时间设置时间voidShowTime();/显示时间显示时间private:intHou

44、r,Minute,Second;重重载载构构造造函函数数举举例例2.4 构造函数构造函数第72页,本讲稿共185页/构造函数的实现:构造函数的实现:Time:Time()Hour=0;Minute=0;Second=0;Time:Time(intNewH,intNewM,intNewS)Hour=NewH;Minute=NewM;Second=NewS;Time:voidSetTime(intNewH,intNewM,intNewS)Hour=NewH;Minute=NewM;Second=NewS;Time:voidShowTime()coutHour:Minute:Secondendl;休

45、息 前一页 下一页第73页,本讲稿共185页/建立对象时构造函数的作用:建立对象时构造函数的作用:voidmain()Timeb;/调用无参构造函数调用无参构造函数Timec(12,30,0);/调用构造函数,将初始值调用构造函数,将初始值作为实参作为实参b.ShowTime();c.ShowTime();结果为:结果为:0:0:012:30:0 休息 前一页 下一页第74页,本讲稿共185页2.4 构造函数构造函数l构造函数的另一种形式构造函数的另一种形式构造函数还可用在函数外直接为其成员初始构造函数还可用在函数外直接为其成员初始化的方法为成员赋初值化的方法为成员赋初值成员初始化格式:成员初

46、始化格式:成员名成员名1(形参形参1),成员名成员名2(形参形参2)构造函数另一格式:构造函数另一格式:类名类名(形参表形参表):成员初始化成员初始化例例:上例上例Time类无参构造函数可写为:类无参构造函数可写为:Time():Hour(0),Minute(0),Second(0)构构造造函函数数特特性性第75页,本讲稿共185页l实例:定义时间类,并测试实例:定义时间类,并测试/no2.4-2A.cppclassTimepublic:Time(intNewH=0,intNewM=0,intNewS=0);voidSetTime(intNewH,intNewM,intNewS);/设设置时间

47、置时间voidShowTime();/显示时间显示时间private:intHour,Minute,Second;带带默默认认值值构构造造函函数数举举例例2.4 构造函数构造函数第76页,本讲稿共185页/构造函数的实现:构造函数的实现:Time:Time(intNewH,intNewM,intNewS)Hour=NewH;Minute=NewM;Second=NewS;Time:voidSetTime(intNewH,intNewM,intNewS)Hour=NewH;Minute=NewM;Second=NewS;Time:voidShowTime()coutHour:Minute:Sec

48、ondendl;休息 前一页 下一页第77页,本讲稿共185页/建立对象时构造函数的作用:建立对象时构造函数的作用:voidmain()Timeb;/构造函数中使用默认值构造函数中使用默认值Timec(12,30,0);/构造函数中使用形参初始构造函数中使用形参初始化化b.ShowTime();c.ShowTime();结果为:结果为:0:0:012:30:0 休息 前一页 下一页第78页,本讲稿共185页classsample/no2.4-3.cpp inti;public:sample()i=0;sample(intx=1)i=x;voiddisplay()coutiendl;voidma

49、in()sampleB(5),A;A.display();B.display();构构造造函函数数的的二二义义性性会引起二义性会引起二义性2.4 构造函数构造函数第79页,本讲稿共185页2.4 构造函数构造函数l二义性解决方法二义性解决方法1.删除无参构造函数删除无参构造函数2.重载定义一个无参构造函数和一个不带重载定义一个无参构造函数和一个不带默认值的构造函数默认值的构造函数如上例定义成:如上例定义成:sample()i=0;sample(intx)i=x;注意:有时将注意:有时将无参或带默认值无参或带默认值的构造函的构造函数亦称为数亦称为默认默认构造函数构造函数第80页,本讲稿共185页

50、2.5 析构函数析构函数第二章类和对象的定义第81页,本讲稿共185页2.5 析构函数析构函数l析构函数亦为特殊的成员函数析构函数亦为特殊的成员函数l函数格式:函数格式:类名类名()函数体函数体l特点:特点:无返回值无返回值,亦不必写,亦不必写void无参无参,亦不可进行重载,亦不可进行重载l功能:功能:完成对象被删除前的一些清理工作完成对象被删除前的一些清理工作析析构构函函数数概概念念第82页,本讲稿共185页2.5 析构函数析构函数#include/no2.5-1.cppclassPointpublic:Point(intinitX,intinitY);Point();intGetX()r

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

当前位置:首页 > 生活休闲 > 资格考试

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

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