第二章类与对象PPT讲稿.ppt
《第二章类与对象PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第二章类与对象PPT讲稿.ppt(185页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章类与对象第二章类与对象第1页,共185页,编辑于2022年,星期二本章主要内容本章主要内容l面向对象的思想面向对象的思想l类概念和声明类概念和声明l类的成员类的成员l构造函数与析构函数构造函数与析构函数l用用const保护数据保护数据l友元友元l静态成员静态成员lthis指针指针第2页,共185页,编辑于2022年,星期二l重点重点:根据具体问题的算法编写程序,重点考虑本根据具体问题的算法编写程序,重点考虑本问题的解决方法和流程问题的解决方法和流程l形式:形式:主模块主模块+若干个子模块(若干个子模块(main()+子函数)。子函数)。每个函数实现一项功能每个函数实现一项功能l特点:特点
2、:设计者必须考虑每一个细节设计者必须考虑每一个细节数据与函数分离,所有数据都是公用的。数据与函数分离,所有数据都是公用的。面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第3页,共185页,编辑于2022年,星期二l缺点:缺点:数据与代码分离导致数据改变时需重新编写函数数据与代码分离导致数据改变时需重新编写函数程序功能扩充时程序的可重用性差,效率低。程序功能扩充时程序的可重用性差,效率低。面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计主函数主函数函数函数1函数函数2函数函数3函数函数11函数函数12函数函数31函数函数32数据数据1数据数据2数据数据3第4页,共185
3、页,编辑于2022年,星期二l例例:编写小型公司人员信息管理系统编写小型公司人员信息管理系统某小型公司主要有人员,经理、兼职技术人某小型公司主要有人员,经理、兼职技术人员、销售经理和兼职推销员。现在需要存储员、销售经理和兼职推销员。现在需要存储这些人员的姓名、编号、级别、当月薪水、这些人员的姓名、编号、级别、当月薪水、计算月薪总额并显示全部信息。计算月薪总额并显示全部信息。月薪计算方法:月薪计算方法:经理经理拿固定月薪拿固定月薪8000元元兼职兼职技术人员技术人员按每小时按每小时100元领取月薪兼职推销员元领取月薪兼职推销员月薪按当月销售额的月薪按当月销售额的4%提成提成销售经理销售经理既拿固
4、既拿固定月薪也领取销售提成,固定月薪为定月薪也领取销售提成,固定月薪为5000元,元,销售提成为所管辖部门当月销售额的销售提成为所管辖部门当月销售额的5。面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第5页,共185页,编辑于2022年,星期二l分析:分析:一般数据描述用结构体一般数据描述用结构体structemployeechar*name;/姓名姓名intno;/编号编号char*job;/职位职位floatpaytotal;/月薪总额月薪总额floathourlyRate;/每小时酬金每小时酬金intworkHours;/当月工作时数当月工作时数floatCommRate;
5、/销售额提取百分比销售额提取百分比floatsales;/当月销售额当月销售额不同职位月薪计算方法和需要数据个数不同,专用与公用数不同职位月薪计算方法和需要数据个数不同,专用与公用数据混杂据混杂,数据结构过于庞大数据结构过于庞大,结构不清结构不清面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第6页,共185页,编辑于2022年,星期二l程序结构:程序结构:函数:函数:Eemployee*input()输入全部数据输入全部数据必须输入全部数据,即使不使用的部分专有数据也不例外,必须输入全部数据,即使不使用的部分专有数据也不例外,且输入顺序要与数据文件顺序匹配且输入顺序要与数据文件顺
6、序匹配E月薪计算函数月薪计算函数pay利用函数重载编写各类人员月薪计算函数利用函数重载编写各类人员月薪计算函数pay,这样主函,这样主函数中必须要有相应分支结构,按职位调用相应数中必须要有相应分支结构,按职位调用相应pay函数函数Evoidoutput(employeeperson)输出全部数据输出全部数据除输出公用数据外除输出公用数据外,其中应有分支结构,根据职位不同输其中应有分支结构,根据职位不同输出其专有数据。如:兼职技术人员要输出每小时薪金数及出其专有数据。如:兼职技术人员要输出每小时薪金数及小时数等信息小时数等信息面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第7页,共
7、185页,编辑于2022年,星期二l分析:分析:修改:修改:E添加钟点工:添加钟点工:4小时以内每小时小时以内每小时5元,元,4小时以上每小时以上每小时小时8元。元。E程序修改范围:添加程序修改范围:添加pay函数,修改所有其他函数函数,修改所有其他函数包括包括main函数包括数据文件函数包括数据文件l结论:结论:面向过程的程序设计在程序的通用性、扩展面向过程的程序设计在程序的通用性、扩展性方面存在缺陷。性方面存在缺陷。面向过程设计方法回顾2.1 面向对象程序设计面向对象程序设计第8页,共185页,编辑于2022年,星期二2.1 面向对象程序设计面向对象程序设计l观点:观点:从程序的通用性入手
8、,将程序潜在使用者作为对象进行从程序的通用性入手,将程序潜在使用者作为对象进行全面研究。认为所有问题由彼此相关且能够相互通信的全面研究。认为所有问题由彼此相关且能够相互通信的实体(对象)所组成,并总结出对象的共性特点。实体(对象)所组成,并总结出对象的共性特点。例:公司:问题。公司中的一个人员:对象。例:公司:问题。公司中的一个人员:对象。l特点:特点:每个对象都有自己的特征每个对象都有自己的特征(对象的属性对象的属性)(数据数据)每个对象都有自己的行为。每个对象都有自己的行为。(操作操作)例:王经理有自己的编号、月薪等数据属性和自己的行为:例:王经理有自己的编号、月薪等数据属性和自己的行为:
9、月薪计算函数月薪计算函数l要求:要求:高度概括、分类、和抽象现实问题。高度概括、分类、和抽象现实问题。将数据与对数据进行的操作封装。将数据与对数据进行的操作封装。面向对象的思想第9页,共185页,编辑于2022年,星期二l抽象:抽象:将研究对象(问题)分类并总结将研究对象(问题)分类并总结出每类对象的公共性质并加以描述出每类对象的公共性质并加以描述将具有相同结构和特性的一批对象总结出将具有相同结构和特性的一批对象总结出来用来用“类类”这种数据结构描述,称为这种数据结构描述,称为对象对象的抽象的抽象数据抽象数据抽象:总结出同类对象的基本特点:总结出同类对象的基本特点(属性)用物理量(变量等)描述
10、(属性)用物理量(变量等)描述代码抽象:总结出同类对象的共有的行为代码抽象:总结出同类对象的共有的行为特征(操作或具有的功能),编写相应专特征(操作或具有的功能),编写相应专用函数用函数E例:编写兼职技术人员的月薪计算函数例:编写兼职技术人员的月薪计算函数2.1 面向对象程序设计面向对象程序设计面向对象的基本特点第10页,共185页,编辑于2022年,星期二l封装封装:将数据和操作放在一起,视为一个:将数据和操作放在一起,视为一个整体称为整体称为类类,与外界相对分隔。,与外界相对分隔。面向对象的基本特点2.1 面向对象程序设计面向对象程序设计类类数据数据操作代码操作代码l例:兼职技术人员例:兼
11、职技术人员特有数据:每小时薪金数和月工作时间特有数据:每小时薪金数和月工作时间特有代码:求月薪函数特有代码:求月薪函数封装成:封装成:技术人员类技术人员类第11页,共185页,编辑于2022年,星期二2.1 面向对象程序设计面向对象程序设计l例:兼职技术人员的封装例:兼职技术人员的封装classtechnician:publicemployee/技术人员类技术人员类private:floathourlyRate;/每小时酬金每小时酬金intworkHours;/当月工作时数当月工作时数public:voidpay()/计算月薪函数计算月薪函数cinworkHours;accumPay=hour
12、lyRate*workHours;第12页,共185页,编辑于2022年,星期二2.1 面向对象程序设计面向对象程序设计l封装封装特点:特点:数据只能在内部使用,外界及其他类只能数据只能在内部使用,外界及其他类只能通过程序接口联系,可以保护数据通过程序接口联系,可以保护数据使用者不必了解具体的实现细节,只通过使用者不必了解具体的实现细节,只通过外部接口以特定的访问权限,使用类的成外部接口以特定的访问权限,使用类的成员员程序扩充功能时可直接编写新的封装模块,程序扩充功能时可直接编写新的封装模块,设计接口接入程序即可设计接口接入程序即可面向对象的基本特点第13页,共185页,编辑于2022年,星期
13、二2.1 面向对象程序设计面向对象程序设计l继承与派生:继承与派生:在一个类基础上可派生出新的类在一个类基础上可派生出新的类新类继承原类的所有成员并可产生新的功新类继承原类的所有成员并可产生新的功能能实际操作时通常将所有对象共用的数据及实际操作时通常将所有对象共用的数据及操作作为基础类,不同对象专有数据都从操作作为基础类,不同对象专有数据都从基类中基类中派生派生得出得出面向对象的基本特点第14页,共185页,编辑于2022年,星期二面向对象的基本特点2.1 面向对象程序设计面向对象程序设计基类公共数据公共数据操作代码操作代码经理数据数据操作代码操作代码技术人员数据数据操作代码操作代码销售人员数
14、据数据操作代码操作代码钟点工数据数据操作代码操作代码第15页,共185页,编辑于2022年,星期二2.1 面向对象程序设计面向对象程序设计l面向对象程序设计总结:面向对象程序设计总结:抽象:将对象分类,并总结同类对象的数抽象:将对象分类,并总结同类对象的数据属性和相应代码(函数)据属性和相应代码(函数)封装:将同类对象所属数据及函数封装在封装:将同类对象所属数据及函数封装在一个类中一个类中派生:类复杂时,将许多类的共同属性及派生:类复杂时,将许多类的共同属性及代码用一个公用类(基类)封装,自己类代码用一个公用类(基类)封装,自己类的特有属性及代码用从公用类派生出的派的特有属性及代码用从公用类派
15、生出的派生类封装生类封装第16页,共185页,编辑于2022年,星期二2.2 类与对象的定义类与对象的定义第二章 类和对象第17页,共185页,编辑于2022年,星期二l类是一种用户自定义类型,它是从结构体引申而类是一种用户自定义类型,它是从结构体引申而来:来:structstudentintnum;charname10;intscore;studentstu,stu2;结构体只包括数据,没有操作,结构体成员在结构体只包括数据,没有操作,结构体成员在本作用域中是本作用域中是“敞开敞开”的,使用不受限制的,使用不受限制2.2 类与对象的定义类与对象的定义类类的的引引入入结结构构体体扩扩展展第18
16、页,共185页,编辑于2022年,星期二2.2 类与对象的定义类与对象的定义l结构体成员在任何函数中均可用直接使用结构体成员在任何函数中均可用直接使用格式:格式:结构体变量名结构体变量名.成员名成员名voidmain()/no2.2-1.cpp studentstu;cinstu.numstu.namestu.score;display(stu);voiddisplay(studentstu)coutstu.numstu.namestu.scoreendl;类类的的引引入入结结构构体体扩扩展展第19页,共185页,编辑于2022年,星期二l结构体类型的扩展在定义中加入代码(函数):结构体类型的
17、扩展在定义中加入代码(函数):structstudentintnum;charname10;intscore;voiddisplay()coutnum:numendl;coutname:nameendl;coutscore:scoreendl;2.2 类与对象的定义类与对象的定义数据成员数据成员函数成员函数成员(代码代码)扩展的结构体扩展的结构体student实现了将数据与对此数据进行实现了将数据与对此数据进行的操作封装在一起的功能的操作封装在一起的功能类类的的引引入入结结构构体体扩扩展展数据是内部成员,直接使用数据是内部成员,直接使用第20页,共185页,编辑于2022年,星期二l封装后的结
18、构体仍然开放,所有成员均可直接使用,但封装后的结构体仍然开放,所有成员均可直接使用,但须按格式使用包括函数成员。须按格式使用包括函数成员。voidmain()/no2.2-1A.cppstudentstu;coutstu.numstu.namestu.score;stu.display();l封装后的结构体仍然开放,所有成员均可直接使封装后的结构体仍然开放,所有成员均可直接使用用2.2 类与对象的定义类与对象的定义类类的的引引入入结结构构体体扩扩展展第21页,共185页,编辑于2022年,星期二l为保护专有数据兼顾外界使用,设置访问权限,为保护专有数据兼顾外界使用,设置访问权限,让专有成员只能
19、内部使用,公开成员则任意使用让专有成员只能内部使用,公开成员则任意使用stuctstudentprivate:intnum;charname10;charsex;public:voiddisplay()coutnum:numendl;coutname:nameendl;coutsex:sexendl;2.2 类与对象的定义类与对象的定义私有成员,只能内部使用私有成员,只能内部使用公有成员,外界可以调用公有成员,外界可以调用类类的的引引入入结结构构体体扩扩展展第22页,共185页,编辑于2022年,星期二l设置访问权限后,主函数作为外部,只能使用公有成设置访问权限后,主函数作为外部,只能使用公有
20、成员。员。voidmain()studentstu;coutstu.numstu.namestu.score;stu.display();2.2 类与对象的定义类与对象的定义类类的的引引入入结结构构体体扩扩展展正确:公有函数可以使用正确:公有函数可以使用错误:私有成员不可使用错误:私有成员不可使用第23页,共185页,编辑于2022年,星期二l解决方案:绕弯使用,增加公有成员函数间接使用内解决方案:绕弯使用,增加公有成员函数间接使用内部成员部成员structstudentprivate:intnum;charname10;charsex;public:voidinput()coutnumnam
21、escore;voiddisplay()coutnum:numendl;coutname:nameendl;coutsex:sexendl;类类的的引引入入结结构构体体扩扩展展为外部使用增加的公有函数为外部使用增加的公有函数 前一页 下一页第24页,共185页,编辑于2022年,星期二l主函数通过公有函数主函数通过公有函数input间接使用内部成员间接使用内部成员voidmain()/no2.2-1B.cppstudentstu;stu.input();stu.display();2.2 类与对象的定义类与对象的定义类类的的引引入入结结构构体体扩扩展展注意:必须用注意:必须用“变量名变量名.函
22、数名函数名”的格式使用的格式使用第25页,共185页,编辑于2022年,星期二2.2 类与对象的定义类与对象的定义l总结:总结:通过扩展结构体数据类型,增加函数成员通过扩展结构体数据类型,增加函数成员和访问权限,使结构体实现了面向对象程和访问权限,使结构体实现了面向对象程序设计中的封装序设计中的封装为更好进行面向对象程序设计,将扩展的为更好进行面向对象程序设计,将扩展的结构体类型改造产生新的数据类型结构体类型改造产生新的数据类型类类类和结构体有着相似的结构,但更为复杂,类和结构体有着相似的结构,但更为复杂,功能更加扩展,能够实现更加复杂的面向功能更加扩展,能够实现更加复杂的面向对象的程序设计对
23、象的程序设计类类的的引引入入结结构构体体扩扩展展第26页,共185页,编辑于2022年,星期二l类的一般声明形式:类的一般声明形式:class类名称类名称private:私有数据和成员函数私有数据和成员函数protected:保护型数据和成员函数保护型数据和成员函数public:公有数据和成员函数公有数据和成员函数;类类的的定定义义2.2 类与对象的定义类与对象的定义类关键字类关键字成员定义成员定义访问权限访问权限第27页,共185页,编辑于2022年,星期二2.2 类与对象的定义类与对象的定义l例例:classABCprivate:inta;protected:intb;voidset(in
24、tx,inty,intz)a=x;b=y;c=z;public:intc;voidprint()coutabcendl;l私有成员:变量私有成员:变量al保护成员:变量保护成员:变量b及函数及函数setl公有成员:变量公有成员:变量c及函数及函数print类类的的声声明明形形式式第28页,共185页,编辑于2022年,星期二l公有权限:在关键字公有权限:在关键字public后面声明,是后面声明,是类与外部的接口,任何外部函数都可以访问。类与外部的接口,任何外部函数都可以访问。l私有权限:在关键字私有权限:在关键字private后面声明,后面声明,只只允许本类中的函数访问,而类外部的任何函允许本
25、类中的函数访问,而类外部的任何函数都不能访问。数都不能访问。l如果如果紧跟在类名称的后面声明私有成员,则紧跟在类名称的后面声明私有成员,则关键关键字字private可以可以省略。省略。类类的的访访问问权权限限2.2 类与对象的定义类与对象的定义第29页,共185页,编辑于2022年,星期二l在关键字在关键字protected后面声明后面声明,与,与private类似,其差别表现在继承与派生时对派类似,其差别表现在继承与派生时对派生类的影响不同。生类的影响不同。2.2 类与对象的定义类与对象的定义类类的的访访问问权权限限第30页,共185页,编辑于2022年,星期二classABCinta;pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 对象 PPT 讲稿
限制150内