类和对象0000

上传人:新** 文档编号:569926358 上传时间:2024-07-31 格式:PPT 页数:41 大小:265.50KB
返回 下载 相关 举报
类和对象0000_第1页
第1页 / 共41页
类和对象0000_第2页
第2页 / 共41页
类和对象0000_第3页
第3页 / 共41页
类和对象0000_第4页
第4页 / 共41页
类和对象0000_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《类和对象0000》由会员分享,可在线阅读,更多相关《类和对象0000(41页珍藏版)》请在金锄头文库上搜索。

1、结构化程序设计的特点:结构化程序设计的特点:n是一种自上而下、逐步细化的模块化程序设计方法。nWirth N的观点:算法 + 数据结构 = 程序n是一种面向过程程序设计方法,即一个程序是由多个过程(在C+中为函数)模块组成,过程之间通过函数参数和全局变量进行相互联系。 结构化程序设计结构化程序设计第二章 类和对象庐丛篡贮蛀罚新龋曝隔洱箔扔苞现胁忱豫苑倒盔弃纹掘恿掀宅锰昌兆娶纺类和对象0000类和对象0000什么是对象:什么是对象:n现实世界是由各种各样的事物组成,包括真实的事物和抽象的事物。例如,人、动物、汽车(真实的事物)和程序、直线(抽象的事物)等。n每一类事物都有自己特定的属性(如大小、

2、形状、重量等)和行为(如生长、行走、转弯、运算等),人们通过研究事物的属性和行为而认识事物。n在计算机科学中将这些现实世界中的事物称之为对对象象。对象是包含现实世界中事物特征的抽象实体,它反映了系统为之保存信息和与之交互的方法。n在程序设计领域,可以用如下公式表示: 对象 = 数据 + 作用于这些数据上的操作 2.1面向对象程序设计方法及特征面向对象程序设计方法及特征盯胀轮稻蛮枚垃镜董采掀蝴咽昨荚赡筒乡迈揽竿政珊柄茹牢骤氰锡伞谴镑类和对象0000类和对象0000n为了描述属性和行为相同的一类对象,引入了类(class)的概念。n类是具有相同数据结构(属性)和相同操作功能(行为)的对象的集合,它

3、规定了这些对象的公共属性和行为方法。n对象是类的一个实例,例如,汽车是一个类,而行驶在公路上的一辆汽车则是一个对象。n对象和类的关系相当于程序设计语言中变量和变量类型的关系。什么是类:什么是类:极梅节喂嚏妇鹿街溃毁弹咙牵姿呵汀垄艘坞娶职未呕恍失日云袭艘式群准类和对象0000类和对象0000面向对象程序设计方法的基本特征面向对象程序设计方法的基本特征面向对象程序设计方法具有四个基本特征:n抽象n封装n继承n多态性1. 抽象抽象 抽象是人类认识问题的最基本手段之一。抽象是指对具体问题(对象)进行概括,抽出一类类对象的公共属性和行为并加以描述的过程。类是对象的抽象,对象是类的特例。渤胡陀窥窄讥淑母闹

4、否煽津台必溢逗明肋卖狰澜晒炯坐凿都懊扮遗罐秒巢类和对象0000类和对象00002. 封装封装 封装是把每个对象的数据(属性)和操作(行为)包装在一个类中。一旦定义了对象的属性和行为,则必须决定哪些属性和行为只用于表示内部状态,哪些属性和行为在外部是可见的。 一般限制直接访问对象的属性,而应通过操作接口访问,这样使程序中模块之间关系更简单、数据更安全。对程序的修改也仅限于类的内部,使得由于修改程序所带来的影响局部化。祝奇斤宪晒吕帅纳肠水球韩赞效屎邻甘焕坦扫杂社葬搽与剖殆全翁厌卞置类和对象0000类和对象00003. 继承继承 继承是指一个新类可以从现有的类派生而来。新类继承了现有类的特性,包括一

5、些属性和行为,并且可以修改或增加新的属性和行为,使之适合具体的需要。 例如,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的,但有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的类,它们增加了不同的属性和行为。 继承很好地解决了软件的可重用性问题。佯锤习田蕾袱感付恰否烃没驯乒龙辈苹驭祈颁虫把讨雍嘿常奴曙绢蕾撬捞类和对象0000类和对象00004. 多态性多态性 多态性是指类中具有相似功能的不同函数使用同一个名称来实现,并允许不同类的对象对同一消息作出的响应不相同。 例如,同样的“编辑|粘贴”操作,在字处理程序和绘图程序中有不同的结果;同样的加

6、法,把两个时间值相加和把两个整数相加的要求肯定不同。 多态性使程序设计灵活、抽象,具有行为共享和代码共享的优点,很好地解决了程序的函数同名问题。皮蛮钱赎疤宵作坪患邦尧伤醛替榔窜秸粥躇双战皑结遗涵冀霖窃竣嘉流抠类和对象0000类和对象0000nOOP围绕现实世界的概念来组织模块,采用对象描述问题空间的实体,用程序代码模拟现实世界中的对象,使程序设计过程更自然、更直观。nSP是以功能为中心来描述系统,而OOP是以数据为中心来描述系统。相对于功能而言,数据具有更强的稳定性。nOOP模拟了对象之间的通信。就象人们之间互通信息一样,对象之间也可以通过消息进行通信。这样,我们不必知道一个对象是怎样实现其行

7、为的,只需通过对象提供的接口进行通信并使用对象所具有的行为功能。面向对象程序设计的特点(一):面向对象程序设计的特点(一):按咽旗腺阑牲康澜臀殉邪厂褂迅稻苦短妨榴振骸盾晤翁陈飘岭酿搓袱衷漏类和对象0000类和对象0000nOOP把一个复杂的问题分解成多个能够完成独立功能的对象(类),然后把这些对象组合起来去完成这个复杂的问题。n一个对象可由多个更小的对象组成,如汽车由发动机、传送系统和排气系统等组成。这些对象(类)可由不同的程序员来设计,可在不同程序中使用,就象一个汽车制造商使用许多零部件去组装一辆汽车,而这些零部件可能不是自己生产的。n采用面向对象模式就象在流水线上工作,我们最终只需将多个零

8、部件(已设计好的对象)按照一定关系组合成一个完整的系统。面向对象程序设计的特点(二):面向对象程序设计的特点(二):狱续报因泣针疤记夏峨透鼓至皋术渝脓完帮立免峭毅艳码鹤苦睫腿轴掖高类和对象0000类和对象00002.2 类的声明和对象的定义类和对象的关系:n对象的类型称为类(class)。类代表了一批对象的共性和特征。n类是对象的模板,是用来定义对象的一种抽象类型n类是抽象的,不占内存,对象是具体的,占用存储空间。革芍痒噪窄辑摧兵宜贩赵褥猿弓祖婉辜俭傀包盟方心谰乙委障锣癸售碎携类和对象0000类和对象0000n为了支持面向对象程序设计,C+在C语言结构(struct)数据类型的基础上引入了类类

9、这种抽象数据类型。nC+面向对象编程实质上就是面向类类编程,只有定义和实现了类,才能声明属于这个类的对象,才能通过对象使用定义的成员。n传统C程序员把编程重点放在函数的编写上,而C+程序员把重点放在类类的定义和实现上。 C+类类豫呀寇泊杂铆映醉笺痰乓方袁鸭抢羹扣锈矗拼曹腰引跃樊眷唤拍延扛翔韶类和对象0000类和对象0000nC+类将对象的属性抽象为数据成员,将对象的行为抽象为成员函数,并对它们进行封装。数据成员又称成员变量,成员函数又称为方法。nC+类在形式上类似于C语言中用户自定义的结构类型,但定义类时规定了成员的访问控制权限。对象只能访问所属类的公有成员,而类的私有成员只能在类的成员函数中

10、被访问。 类的定义与实现类的定义与实现嘉喂考图缎钓硕六敢瓷着台呈炎山谰肮赡馆挣捆申钝疼呈焙食撒梧而廉蜀类和对象0000类和对象0000class class privateprivate: ;publicpublic: ;protectedprotected: ;C+类定义的基本形式:类定义的基本形式:筹郧千套浅镑矽仗投贸寒熟舒日隆潞离司碳保退怂丰碉吴返仕曲藩物炉醋类和对象0000类和对象0000n类的定义由关键字class开始,其后为用户定义的类名,花括号括起来的部分称为类体。n关键字private、public和protected称为访问权限控制符,用来设置数据成员和成员函数的访问属性,其

11、默认值为private。nprivate属性表示数据成员和成员函数是类的私有成员,它们只允许被本类的成员函数访问或调用,数据成员一般定义为private属性;说明:说明:顽凝冠退诽骂链赛情虚懈腮锋第糯谱将淌栋钱宙背族狞藐光玖蜗抵涎铆渣类和对象0000类和对象0000npublic属性表示数据成员和成员函数是类的公有成员,它们允许被本类或其它类的成员函数(通过对象)访问或调用,是类的外部接口,成员函数一般定义为public属性;nprotected属性表示数据成员和成员函数是类的保护成员,它们允许被本类的成员函数和派生类的成员函数访问或调用。说明:说明:芋美帽惺愤效钙丈汞电烛哈镜回咖薯薛棘话媒朱

12、尼尼绘嚷豢隘挨上赘拥搏类和对象0000类和对象0000class Timeprivate:/ 最好不要省略private int hour;/ 数据成员,表示小时 int minute;/ 数据成员,表示分钟 int second;/ 数据成员,表示秒public: void setTime(int, int, int);/ 成员函数,设置时间 void showTime();/ 成员函数,输出时间;例例 定义类Time(表示时间)。私有数据成员hour、minute和second只能在类的成员函数中被访问或赋值;公有成员函数setTime、showTime可在外部被调用,但必须通过一个对象作

13、为对象的成员使用。剥汞搭掸暑席驹锣照郑侠朽焙秒返凌团艘连呻复什掘施敖娇氦歼氛达铰邮类和对象0000类和对象0000n利用C+类进行面向对象编程,定义类的成员只是完成了工作的第一步,最重要的工作是实现定义的类。n类的实现实质上是类的成员函数的实现,即定义类的成员函数。n成员函数的定义形式与一般函数的定义形式基本相同,但必须在成员函数名前加上类名和作用域限定符(:)。n成员函数的定义也可放在类体内(该函数声明之处),这时成员函数将变成内置函数。 类的实现:类的实现:浚利淫鬼员胸塑及桥昔营你并襟办琉降狭裸龚承括稿籽胡果渠偶拟羽攘蝎类和对象0000类和对象0000void Time:setTime(i

14、nt h, int m, int s) hour=(h=0 & h=0 & m=0 & s60) ? s:0;void Time:showTime() couthour:minute:secondendl;例例 类Time的实现。private成员hour、minute和second不允许外界存取,所以为类Time增加两个public成员函数,供外界设置或显示private成员。帖禾漾挑夺信倘昧彪去俏豪氏验心缅思竟乱探沽霄钒仟冈许烷欧眺下爹酬类和对象0000类和对象0000类与结构体struct Piontint x;int y;void main()Point pt;pt.x=5;pt.y=

15、5; coutpt.xendlpt.yendl; class Piontpublic:int x;int y;void main()Point pt;pt.x=5;pt.y=5;coutpt.xendlpt.yendl; 结构体结构体中默认为访问类型为公有中默认为访问类型为公有,类类中默认为中默认为访问类型为私有访问类型为私有克燥集篷鲁蜗窘仔削禾必斟演稍侥汇丧月米颁尊体忘进熏验牧措谋班凝抹类和对象0000类和对象0000 class Student stu1, stu2; class 类名类名 对象名对象名定义对象的方法定义对象的方法也可直接写成也可直接写成Student stu1, stu2

16、; 类名类名 对象名对象名(1)(1)先声明类类型,然后再定义对象先声明类类型,然后再定义对象辅饲捕有尘卸肆断藻乒凄左潍圃塘督孩酞卤饼士糖纸泼谓疗宽挂抽竖士湘类和对象0000类和对象0000 private: public: 对象名;(2)(2)在声明类类型的同时定义对象在声明类类型的同时定义对象:定义形式定义形式 class 类名定义形式定义形式 class(3) 不出现类名,直接定义对象不出现类名,直接定义对象 private: public: 对象名;迪粥丧版讨嵌重炙撇先蚤运媳般魔剂劈和襟弯汇隧浮窍械课坡衙茄犹笨管类和对象0000类和对象00002.3 类的成员函数n类的成员函数(类函数

17、)与一般函数的区别:它是属于一个类的成员,出现在类体中。可以被指定为private、public、protected。n一般做法是将需要被外界调用的函数指定为public,作为类对外的接口。焊她嘉脆娄荡唱龟纫蛹祟铣吊宇赘塌忙泣钾独淬跋杠晃华倚柳稚孪胰羌顺类和对象0000类和对象0000在类外定义成员函数class Student public:void display( ); /公用成员函数原型声明公用成员函数原型声明private:int num;string name; char sex; /以上以上3行是私有数据成员行是私有数据成员 ;void Student display( ) /在

18、类外定义在类外定义display类函数类函数coutnum:numendl;coutname:nameendl; coutsex:sexendl; Student stud1,stud2; 在成员函数中访在成员函数中访问成员不能加对问成员不能加对象名来作为前缀象名来作为前缀境廷殴垄菊伏薪淄惹鹏啦脑船念顽晚鳖耽院闸绅刁妄券穆谐坞喜什匀屋嘿类和对象0000类和对象0000n类的成员函数可以指定为内置函数n对一般的内置函数要用inline声明,但在类里面定义的成员函数,可以省略inline,因为已经被隐含指定为内置函数n如果在类体外定义成员函数,如果要将这些成员函数指定为内置函数,应当用inline

19、作显式声明inline 成员函数坐鞘琉启余厂孤纫狈矮霸妹慈欢兔枕矗承邯宝具遍露谤疆顾摔饺枚迹凭笛类和对象0000类和对象0000inline 成员函数class Student public:inline void display( ); /声明此成员函数为内置函数声明此成员函数为内置函数private:int num;string name; char sex; ;inline void Student display( ) / 在类外定义在类外定义display函数为内置函数函数为内置函数coutnum:numendl; coutname:nameendl; coutsex:sexendl

20、; 雅正饵橇乱怪鞭协寐寂沼捕冰藉狙湖朴绷陛仔翁潭诺耽鹃云紧驶姐斩神做类和对象0000类和对象0000成员函数的存储方式 inline(内置内置)成员函数也是这种存储方式吗成员函数也是这种存储方式吗? 不论成员函数在类内定义还是在类外定义,不论成员函数在类内定义还是在类外定义,成员函数的代码段都用同一种方式存储。成员函数的代码段都用同一种方式存储。焊淄忍绸娟任蓄祟欣矩球梳予袄嚏增描旨篙丽帅霸罕孪矮良呐九蔷瑞凌帝类和对象0000类和对象00002.4 引用对象成员的方式class Timepublic: int hour;int minute;Time t,*p; p=&t;Time &t1=t

21、(2) 用指针变量用指针变量 ( p).成员成员名名 ( p). hour (3) 用指向运算符用指向运算符成员名成员名 p hour (1) 对象名对象名.成员名成员名 t.hour(4) 通过引用访问对象中的成员:t1.hour毅唉移劝允匝熏楞灰假节扩孔迢爸馒郧酥肚绍墓喀民盘遇器猎还圾驶蒜德类和对象0000类和对象00002.5 类和对象的简单应用#include using namespace std;class Time public: int hour; int minute; int sec; ;int main() Time t1; Time &t2=t1; cint2.hour

22、; cint2.minute; cint1.sec; coutt1.hour:t1.minute:t2.secendl; 突沾哗壶耕土你贼坷载次旦宿挨稀盲难辈豁识医逛积噪忌啥勒扛雕嫩撤洞类和对象0000类和对象0000例#include using namespace std;class Time public: void set_time() ; void show_time(); private: int hour; int minute; int sec; ; 裸瑶隋茸枢添谷锈偷塘竟甥搓鄙互弟叮鹤饿簇啸奇炎板差因撵汛瞅阴瞬卉类和对象0000类和对象0000void Time:set_ti

23、me() cinhour; cinminute; cinsec; void Time:show_time() couthour:minute:secendl; 农实抖棚抄目条涤尉咎泛绰筏募钡虞硒告躁骑唬文谎谋屠的蓄赂志爆谈恤类和对象0000类和对象0000例 (二)int main() Time t1; t1.set_time(); t1.show_time(); Time t2; t2.set_time(); t2.show_time(); return 0; 井沟源肠眯刻宿杜扶坠屉惕纲葱截消隙斡扫紫年瑟贺热獭荤烟氛镣熬持汪类和对象0000类和对象00002.6 类的封装性和信息隐蔽n共有接

24、口与私有实现的分离共有接口与私有实现的分离 声明类时,一般把所有的数据指定为私有的,使它们与外界隔离,把需要外界调用的成员函数指定为公有,外界通过公有的函数实现对数据的操作。 公有的成员函数是用户使用类的公共接口(public interface)。在类外不能直接访问的私有数据成员,可以通过公有成员函数来引用或修改私有数据成员的值 通过成员函数对数据成员进行操作称为类的实现,类中被操作的数据是私有的,实现的细节对用户是隐蔽的,这种实现称为私有实现(private implementation)贵崎伺三卧樊逆侧趴沏逞养铭乌问矗刽灯宙昧坍晒山头孤瞧霜箱避绘娶咕类和对象0000类和对象0000接口与

25、实现分离的好处n如果想修改或扩充类的功能,只需要修改类中的有关数据成员和与它有关的成员函数,程序中类外的部分可以不修改。n编译和调试时发现类中的数据读写有错,不必检查整个程序,只需要检查本类中访问这些数据的少数成员函数 涟咱青屉汛柞又槐赣酒雁棘橙揪羚外跃淹凯烧伸葡答淹浆农深洛央疟计僵类和对象0000类和对象0000类声明和成员函数定义的分离 一般将类的定义放在头文件(.h)中,类的实现放在源文件(.cpp)中,而main主函数可以放在另一个源文件中。在源文件中用#include编译预处理指令包含头文件。媒弊晚惜禹韦碉胺求挚篙博血韶韧狗挛办懈鸵教凤采恰位撬立语郭蛙烦虑类和对象0000类和对象00

26、00在头文件中进行类的声明/student.h#includeusing namespace std;class Studentpublic:void display( );private:int num;string name;char sex;躺怂榆潍蕴西顿蜜奏峡激纯贝朝翅柳茬匡园农拱涯斯鲤茁侥锨沁悸类刨倍类和对象0000类和对象0000在另外一个文件中进行函数定义/student.cpp#include#include“student.h”Void Student:display( )cout“num”numendl;Cout“name:”nameendl;Cout“sex:”sexen

27、dl;憋仪皋添封钞告申懈垛茎遁朵脑勿戚蒂今魁煽恃珐绞轮疼一亮育硕刮蛋崩类和对象0000类和对象0000为了组成一个完整的源程序,还应有包括主函数的源文件:/main.cpp#include#include“student.h”using namespace std;int main( )Student stud;stud.display( );return 0;凳摆篱宽瑞别姚煎胡旬坠戈搪繁彤沸买蒸鲤耳攻守激帝砸覆锦抉苟鹰堑惩类和对象0000类和对象0000埔沁械览凳足恋扒嫩锌与惺缺企莫疆瓣河吟氛曳件杯浚绽凑慨年汰曹试绚类和对象0000类和对象0000面向对象程序设计的几个名词n对象 studn

28、方法 display() 类的成员函数,是指对数据的操作。只有公有的方法才能被对象外界所激活。n消息 stud.display( ) 由程序语句实现的一个命令,如stud.display( )就是向对象stud发出一个消息,通过它执行其中的display方法。筹瓦滞刨凉罗庙劳嫌毡诅务何袖以跃篮映垮彩涎船蓑祸拓勋绒布掺客暑汪类和对象0000类和对象0000补充习题:1.定义一个score类,它包含私有数据成员english_score,math_score,physics_score,有公有的成员函数void setscore(int,int,int)和void printscore()用来设置

29、数据成员的值和输出各数据成员的值。要求在主函数中定义score类的两个对象stu1和stu2,并给stu1和stu2的各成员赋值,并输出两对象的数据成员值。啮质殊报碴撰倾签癣伶焕搏然里饰双界支码枝锋直疑厕鼓惰随颈茵信徊乐类和对象0000类和对象00002.下面是一个计算机类的定义,请完成该类的实现,并定义一个main函数,生成一个该类的对象,分别测试各成员函数的功能。class counterint value;public:void setvalue(int);void increment();void decrement();int getvalue();void print();室魁瓷既象曾融冕拐旱浴墩末刹宅尽直贞十奈胳捞灼管未校烛妻卷拢汐罗类和对象0000类和对象0000

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号