




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章抽象类,纯虚函数抽象类抽象类编程,1.纯虚函数,继承体系的多态问题:继承体系反映的是事物的分层分类,它是倒树状,顶端是基类越顶端越抽象,越底端越具体基类往往是一种概念表达,或者像Account类那样,仅仅提取了各个子类的共性,本身并不构成有意义的实体这种基类的成员都是为子类提供的特别是虚函数,不同的子类有不同的实现,于基类中的定义版本并无意义classAccount/.public:virtualvoidwithdrawal(doubleamount)/无意义;,不同的子类有不同的实现,而于基类中的定义版本并无意义的虚函数常声明为纯虚函数。纯虚函数是在基类中说明的虚函数。纯虚函数本身不定义具体的操作。纯虚函数的声明格式为:virtual函数类型函数名(参数表)=0;纯虚函数在基类中没有函数体。纯虚函数在派生类中可以多态地定义具体的函数体。,classAccountpublic:/纯虚函数virtualvoidwithdrawal(doubleamount)=0;,带有纯虚函数的类称为抽象类。抽象类自身无法实例化,即不能定义一个抽象类的对象。但可以声明一个抽象类的指针或引用。通过改变指针或引用的具体地址,指向相应的派生类的对象,以便在访问过程中实现多态的操作。抽象类不能直接创建对象的原因是其中有一个或多个函数没有定义。在抽象类的派生类中,可以具体定义纯虚函数的操作。这时的派生类就不是抽象类,就可以定义具体的对象。但如果派生类没有全部定义纯虚函数的操作,继承了部分纯虚函数,则这时的派生类仍然是抽象类。,2.抽象类,classAccountpublic:/纯虚函数virtualvoidwithdrawal(doubleamount)=0;Account就是抽象类Accountac;/错误不能声明为对象,抽象类作用:抽象类为抽象和设计的目的而建立,抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。,抽象类的继承结构,Display,+virtualinit()=0:void+virtualwrite()=0:void,Monochrome,+virtualinit():void+virtualwrite():void,ColorAdapter,+virtualwrite():void,SVGA,+virtualinit():void,显示器类,初始化操作,写屏操作,彩色显示器类,单色显示器类,SVGA显示器类,classSVGA:publicColorAdapterpublic:virtualvoidinit()coutinit();d-write();voidmain()Monochromem;SVGAs;g(,#includeusingnamespacestd;classDisplaypublic:virtualvoidinit()=0;/初始化virtualvoidwrite()=0;/写屏;classMonochrome:publicDisplayvirtualvoidinit()coutMonochromeinitn;virtualvoidwrite()coutMonochromewriten;/单色显示器classColorAdapter:publicDisplaypublic:virtualvoidwrite()coutColorAdapterwriten;/彩色显示器,对应代码,MonochromeinitMonochromewriteSVGAinitColorAdapterwrite,3.抽象类编程,Shape,+virtualPrintName()=0:void+virtualPrint()=0:void+virtualArea():double+virtualVolume():double,Point,+Point(int,int)+virtualPrintName():void+virtualPrint():void,-x:int-y:int,Circle,+Circle(int,int,double)+PrintName():void+Print():void+Area():double+Perimeter():double,-radius:double,Cylinder,+Cylinder(int,int,double,double)+PrintName():void+Print():void+Area():double+Volume():double,-height:double,-Center1,抽象类方案设计,图形类分析设计,1.*,ManageShape,+Add(Shape*ptr):+Print():void+Count():void,-maxsize:int-number:int,为方便应用编程,设计图形管理类,来组织各种图形,Shape,+virtualPrintName()=0:void+virtualPrint()=0:void+virtualArea():double+virtualVolume():double,Point,+Point(int,int)+virtualPrintName():void+virtualPrint():void,-x:int-y:int,Circle,+Circle(int,int,double)+PrintName():void+Print():void+Area():double+Perimeter():double,-radius:double,Cylinder,+Cylinder(int,int,double,double)+PrintName():void+Print():void+Area():double+Volume():double,-Center1,1.*,-arrshape:Shape*1,1.*,/fileShape.h#ifndef_SHAPE_H_#define_SHAPE_H_#includeusingnamespacestd;constfloatcstfPI=3.1415926f;classShapepublic:virtualvoidPrintName()const=0;/输出图形名字virtualvoidPrint()const=0;/输出图形基本信息virtualdoubleArea()constreturn0.0;/获取图形面积virtualdoubleVolume()constreturn0.0;/获取图形体积;#endif,/filePoint.h#ifndef_POINT_H_#define_POINT_H_#includeShape.hclassPoint:publicShapepublic:Point(int=0,int=0);virtualvoidPrintName()const;virtualvoidPrint()const;protected:intx,y;#endif,/filePoint.cpp#includePoint.hPoint:Point(inta,intb)x=a;y=b;voidPoint:PrintName()constcout点:;voidPoint:Print()constcout坐标x,y;,/fileCircle.h#includePoint.hclassCircle:publicShapepublic:Circle(intvx,intvy,doublevr);virtualvoidPrintName()const;virtualvoidPrint()const;doublePerimeter()const;virtualdoubleArea()const;protected:doubleradius;Pointcenter;#endif,/fileCircle.cpp#includeCircle.hCircle:Circle(intvx,intvy,doublevr):center(vx,vy)radius=vr;/-voidCircle:PrintName()constcout圆:;/-voidCircle:Print()constcenter.Print();cout;半径=radius;doubleCircle:Perimeter()constreturn2*cstfPI*radius;/-doubleCircle:Area()constreturncstfPI*radius*radius;/-,/fileCylinder.h#ifndef_CYLINDER_H_#define_CYLINDER_H_#includeCircle.hclassCylinder:publicCirclepublic:Cylinder(intx,inty,doublevh,doublevr);virtualvoidPrintName()const;virtualvoidPrint()const;virtualdoubleArea()const;virtualdoubleVolume()const;private:doubleheight;#endif,/fileCylinder.cpp#includeCylinder.h#includeCylinder.hCylinder:Cylinder(intvx,intvy,doublevr,doublevh):Circle(vx,vy,vr)height=vh;voidCylinder:PrintName()constcout圆柱:;voidCylinder:Print()constCircle:Print();cout;高=maxsize-1)cout已经没有空间存储!;return;arrshapenumber+=ptr;,voidManageShape:Count()intsumpoint=0;intsumcircle=0;intsumcylinder=0;for(inti=0;inumber;i+)if(typeid(*arrshapei)=typeid(Point)sumpoint+;elseif(typeid(*arrshapei)=typeid(Circle)sumcircle+;elseif(typeid(*arrshapei)=typeid(Cylinder)sumcylinder+;cout共有图形number个,其中:n;cout点sumpoint个n;cout圆sumcircle个n;cout圆柱sumcylinderPrint();coutArea()Volume()nn;,/fileMain.cpp#includeManageShape.hvoidmain()Shape*arrShapes3=NULL,NULL,NULL;Pointp(7,10);Circlec(20,6,3.0);Cylindercy(10,10,2.4,10.6);arrShapes0=,点:坐标7,10;面积=0;体积=0圆:坐标20,6;半径=3;面积=28.2743;体积=0圆柱:坐标10,10;半径=2.4;高=10.6;面积=196.035;体积=191.813共有图形3个,其中:点1个圆1个圆柱1个,银行类抽象类方案设计,银行类分析设计,Account,+Account(string,double=0)+deposit():voif+GetNO():string+GetM():double+virtualdisplay():void+virtualwithdrawal()=0:void,#acbtNumber:string#balance:double,Savings,+Savings(string,double)+virtualdisplay()+virtualwithdrawal(),-minBalance:double,Checking,+Checking(string,double)+virtualdisplay()+virtualwithdrawal()+setRemit():void,-remittance:REMIT,为方便应用编程,分别设计结点类和账户链表类,来组织账户数据,Node,+next:Node*,AccountList,+Add(Account,/fileAccount.cpp#includeAccount.hAccount:Account(stringacntNo,doublebalan=0.0)acntNumber=acntNo;balance=balan;voidAccount:display()constcoutAccount:acntNumber=balancen;,账户基类定义,classAccountprotected:stringacntNumber;/账号doublebalance;/余额public:Account(string,double=0.0);stringGetNO()returnacntNumber;doubleGetM()returnbalance;voiddeposit(doubleamount)balance+=amount;virtualvoiddisplay()const;virtualvoidwithdrawal(double)=0;virtualAccount();#endif,代码设计,/fileSaving.h#ifndefSAVING_H#defineSAVING_H#includeAccount.hclassSavings:publicAccount/允许透支金额staticdoubleminBalance;public:Savings(stringacntNo,doublebalan=0.0):Account(acntNo,balan)virtualvoiddisplay()const;virtualvoidwithdrawal(double);virtualSavings();#endif,/fileSavings.cpp#includeSavings.hdoubleSavings:minBalance=100;voidSavings:display()constcoutSavings;Account:display();voidSavings:withdrawal(doubleamount)if(balance+minBalanceamount)cout资金不足!:amountn;elsebalance-=amount;,存款账户类定义,/fileChecking.h#ifndefCHECKING_H#defineCHECKING_H#includeAccount.h/汇款方式:信汇,电汇,无enumREMITremitByPost,remitByCable,other;classChecking:publicAccountREMITremittance;public:Checking(stringacntNo,doublebalan=0.0);voidsetRemit(REMITre)remittance=re;virtualvoidwithdrawal(double);virtualvoiddisplay()const;virtualChecking();#endif,/fileChecking.cpp#includeChecking.hChecking:Checking(stringacntNo,doublebalan):Account(acntNo,balan)remittance=other;voidChecking:display()constcoutChecking;Account:display();voidChecking:withdrawal(doubleamount)/信汇30元手续费if(remittance=remitByPost)amount+=30;/电汇60元手续费if(remittance=remitByCable)amount+=60;if(balanceamount)cout资金不足:amountdisplay();AccountList:AccountList()/析构Node*pN=NULL;while(first!=NULL)pN=first;first=first-next;deletepN;pN=NULL;,主函数,开户操作:Thereare2account.CheckingAccount:Check888=500SavingsAccount:Save3296=300,/fileMain.cpp#includeAccountList.hvoidmain()AccountListlist;coutacnt)-GetNO()=acntNO)return(pN-acnt);returnNULL;voidAccountList:deposit(stringvno,doublevm)/存款Account*p=find(vno);if(p!=NULL)p-deposit(vm);elsecout账户vno不存在withdrawal(vm);elsecout账户vno不存在setRemit(remit);,/fileMain.cpp#includeAccountList.hvoidmain()AccountListlist;cout开户操作:n;Savingss(Save3296,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 入职安全规程培训课件
- 俱乐部饮水安全培训课件
- 狂犬病暴露后免疫球蛋白浸润注射护理查房
- 新质生产力光刻技术
- 绍兴流动广告管理办法
- 税收专家团队管理办法
- 2025年中医内科经络穴位定位考核答案及解析
- 2025年中央一号文件考试题及答案
- 分子云动力学-洞察及研究
- 出租车安全管理培训心得
- 新版人教版八年级上册生物全册教案教学设计含教学反思
- 2025年人教版音乐四年级上册教学计划(含进度表)
- 2025山西晋中昔阳县文化旅游发展有限责任公司社会招聘15人笔试备考题库及答案解析
- 2025-2026学年统编版(2024)初中历史八年级上册教学计划及进度表
- 妇科抗生素使用课件
- 成人2型糖尿病口服降糖药联合治疗专家共识解读 2
- 2025-2026学年统编版小学语文五年级上册教学计划及进度表
- 解读《医务人员职业道德准则(2025年版)》(含准则全文)
- 2025 - 2026学年教科版科学三年级上册教学计划
- 2025年总工会招聘考试工会知识模拟试卷及答案
- 销售话术培训方案
评论
0/150
提交评论