好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C面向对象实用例子章习题分析实用教案.ppt

34页
  • 卖家[上传人]:ni****g
  • 文档编号:575966167
  • 上传时间:2024-08-19
  • 文档格式:PPT
  • 文档大小:920.50KB
  • / 34 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • •通过基类指针或引用即可访问(fǎngwèn)基类和派生类中的同名函数第1页/共33页第一页,共34页 例2:￿￿这里(zhèlǐ)用到了什么?第2页/共33页第二页,共34页 第3页/共33页第三页,共34页 虚基类•上例用到了虚基类,虚继承•只存在一个(yī￿ɡè)CAnimal的复制第4页/共33页第四页,共34页 例3:￿￿这里(zhèlǐ)用到了什么?第5页/共33页第五页,共34页 第6页/共33页第六页,共34页 抽象类•上例用到了抽象类,纯虚函数•抽象类面积的计算方法不确定,设为纯虚函数,这样圆形有圆形的面积计算方法,矩形有矩形的面积计算方法,每个继承于CFigure的类都有自己的面积,通过getArea成员函数即可获得面积•包含纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚函数抽象类只能作为基类派生新的子类,不能实例化•比如,软件构造师可以通过纯虚函数建立接口,然后让程序员填写(tiánxiě)代码实现接口,而自己主要负责建立抽象类第7页/共33页第七页,共34页 例4:实现(shíxiàn)抽象类中的成员函数第8页/共33页第八页,共34页 第9页/共33页第九页,共34页。

      例5:多重继承(jìchéng)•多个(duō￿ɡè)基类派生一个子类第10页/共33页第十页,共34页 •派生出Teacher_Level类,包含教师和职称(zhíchēng)信息,新增工资信息第11页/共33页第十一页,共34页 练习1:写出下列(xiàliè)程序的运行结果#include￿using￿namespace￿std;class￿A{public:￿￿￿￿￿￿A(int￿i￿=￿3){￿x￿=￿i;￿}￿￿￿￿￿￿virtual￿void￿at()￿￿{￿￿cout<<"x="<at2();￿￿￿￿￿￿￿￿￿￿B￿￿s(8);￿￿￿￿￿￿￿￿￿￿p￿=￿&s;￿￿￿￿￿￿￿￿￿￿p->at2();￿￿￿￿￿￿￿￿￿￿￿return￿0;￿￿}第13页/共33页第十三页,共34页。

      •程序运行结果( jiē￿guǒ):•x=5•y=8第14页/共33页第十四页,共34页 练习(liànxí)2:•下列Shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数请从Shape类派生三角形类(Triangle)、矩形类(Rectangle),并给出具体(jùtǐ)的求面积函数•class￿Shape{￿•public:￿•  ￿virtual￿double￿area()￿const=0;//纯虚函数•};￿•float￿total(Shape￿*s[],int￿n)￿//一般函数•{￿ ￿float￿sum=0.0;￿•  ￿for(int￿i=0;iarea();￿•  ￿return￿sum;￿}第15页/共33页第十五页,共34页 解答(jiědá):•class￿Triangle:public￿Shape•{public:•  Triangle(double￿h,double￿w){H=h;W=w;}•  double￿area()￿const{return￿H*W*0.5;}•private:•  double￿H,W;•};￿•class￿Rectangle:public￿Shape•{public:•  Rectangle(double￿h,double￿w){H=h;W=w;}•  double￿area()const{return￿H*W;}•private:•  double￿H,W;•};第16页/共33页第十六页,共34页。

      练习3:写出下列程序的运行(yùnxíng)结果•//Triangle.h•#include￿•class￿Triangle￿￿￿￿￿￿￿//定义(dìngyì)三角形类•{•public:•void￿SetTriangle(int￿x,￿int￿y,￿int￿z);￿•double￿￿GetArea();￿￿￿￿￿￿￿￿￿￿￿￿￿￿•int￿GetPerimeter();￿￿￿￿￿//周长￿￿￿￿￿￿￿￿￿•void￿Print();￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿•private:•int￿a,b,c;￿￿•};•Triangle￿&￿compare(Triangle￿&￿t1,￿Triangle￿&￿t2);第17页/共33页第十七页,共34页 //Triangle.cpp•#include￿•#include￿"Triangle.h"•void￿Triangle::SetTriangle(int￿x,￿int￿y,￿int￿z)￿•￿￿￿￿￿￿￿￿{￿￿￿￿￿a=x;b=y;c=z;}•double￿Triangle::GetArea()￿•￿￿￿￿￿￿￿{￿￿￿￿double￿s;s￿=￿(a￿+￿b￿+￿c)/2.0;return￿sqrt(￿s*(s-a)*(s-b)*(s-c));￿}•int￿Triangle::GetPerimeter()￿•￿￿￿￿￿￿￿{￿￿return￿(a￿+￿b￿+￿c);￿}•void￿Triangle::Print()￿￿￿￿•￿￿￿{￿￿cout<<"the￿three￿side￿of￿the￿triangle￿is:"<t2.GetArea())￿￿return￿t1;•￿￿￿￿￿￿￿￿￿￿￿￿￿else￿return￿t2;}第18页/共33页第十八页,共34页。

      //abc.cpp•#include￿"Triangle.h"•void￿main()•{•Triangle￿t1;￿￿￿￿￿￿￿￿￿•t1.SetTriangle(4,5,6);•Triangle￿t2;￿￿•t2.SetTriangle(7,8,9);•Triangle￿&￿max￿=￿compare(t1,t2);•max.Print();•}第19页/共33页第十九页,共34页 //abc.cpp程序运行结果( jiē￿guǒ):￿￿￿￿￿￿￿￿￿￿the￿three￿side￿of￿the￿triangle￿is:7,8,9￿￿￿￿￿￿￿￿￿￿the￿perimeter￿of￿the￿triangle￿is:24￿￿￿￿￿￿￿￿￿￿the￿area￿of￿the￿triangle￿is:26.8328第20页/共33页第二十页,共34页 练习5:写出下列(xiàliè)程序的运行结果•#include•using￿namespace￿std;•class￿B•{•public:•￿￿￿￿B()￿{}•￿￿￿￿B(int￿i)￿{￿b=i;￿}//构造函数重载(zhònɡ￿zǎi)•￿￿￿￿virtual￿void￿virfun()•￿￿￿￿{￿￿￿￿cout<<"B::virfun()￿is￿called.\n";￿￿￿￿}•private:•￿￿￿￿int￿b;•};第21页/共33页第二十一页,共34页。

      •class￿D:public￿B•{•public:•￿￿￿￿￿￿￿￿￿D()￿{}•￿￿￿￿￿￿￿￿￿D(int￿i,int￿j)￿:B(i)￿{￿d=j;￿}•￿￿￿￿￿￿￿￿void￿virfun()•￿￿￿￿￿￿￿￿￿{￿￿￿￿cout<<"D::virfum()￿is￿called.\n";￿￿￿￿}￿•private:•￿￿￿￿￿￿￿￿￿int￿d;•};•void￿fun(B*obj)•{￿￿￿￿￿￿￿obj->virfun();￿￿￿￿￿￿￿}第22页/共33页第二十二页,共34页 •int￿main()•{•B￿*pd=new￿D;•fun(pd);•return￿0;•}￿第23页/共33页第二十三页,共34页 运行(yùnxíng)结果:•int￿main()•{•B￿*pd=new￿D;•fun(pd);•return￿0;•}￿•运行(yùnxíng)结果:D::virfum()￿is￿called.第24页/共33页第二十四页,共34页 练习(liànxí)6•定义一个抽象类CShape,包含纯虚函数Area()(用于计算面积)和SetData()(用于重设形状大小)。

      然后派生出三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置编写一个完整(wánzhěng)的程序￿第25页/共33页第二十五页,共34页 •#include￿•#include￿•using￿namespace￿std;•class￿CShape•￿{•￿public:•virtual￿double￿Area()￿=￿0;//纯虚函数(hánshù)•￿virtual￿void￿SetData()￿=￿0￿;//纯虚函数(hánshù)•};第26页/共33页第二十六页,共34页 •class￿CTriangle:public￿CShape•￿{•double￿a,￿b,￿c;•public:•￿￿￿￿CTriangle()￿{￿a￿=￿b￿=￿c￿=￿0.0;￿}•￿￿￿￿CTriangle(double￿A,￿double￿B,￿double￿C)•￿￿￿￿￿￿￿{￿￿a￿=￿A;￿b￿=￿B;￿c￿=￿C;￿￿￿}•￿￿￿￿virtual￿double￿Area()•￿￿￿￿￿￿￿￿{￿￿￿double￿p￿=￿(a￿+￿b￿+￿c)￿/￿2.0;•￿￿￿￿￿￿￿￿return￿sqrt(p￿*￿(p￿-￿a)￿*￿(p￿-￿b)￿*￿(p￿-￿c));￿}•￿￿￿￿virtual￿void￿SetData()•￿￿￿￿￿￿￿￿{￿￿￿cout￿<<￿"输入(shūrù)三角形的三边长:\n";•￿￿￿￿￿￿￿￿￿￿￿￿￿cin￿>>￿a￿>>￿b￿>>￿c;￿}•￿￿};第27页/共33页第二十七页,共34页。

      •class￿CRect:public￿CShape•￿{•double￿h,￿w;•￿public:•￿￿￿￿￿CRect()￿{￿h￿=￿w￿=￿0.0;￿}•￿￿￿￿￿CRect(double￿H,￿double￿W){h￿=￿H;￿￿w￿=￿W;￿}•￿￿￿￿￿virtual￿double￿Area()￿{￿return￿h￿*￿w;￿}•￿￿￿￿￿virtual￿void￿SetData()•￿￿￿￿{cout￿<<￿"输入(shūrù)矩形的长和宽:\n";￿￿cin￿>>￿h>>￿w;}•};第28页/共33页第二十八页,共34页 •class￿CCircle:public￿CShape•￿{￿•￿double￿r;•￿public:•￿￿￿￿￿CCircle()￿{￿r￿=￿0.0;￿}•￿￿￿￿￿CCircle(double￿R)￿{￿r￿=￿R;￿}•￿￿￿￿￿virtual￿double￿Area()￿{￿return￿r￿*￿r￿*￿3.14;￿}•￿￿￿￿￿virtual￿void￿SetData()•￿￿￿￿￿￿{cout￿<<￿"输入(shūrù)圆形的半径:\n";•￿￿￿￿￿￿￿cin￿>>￿r;}•￿};第29页/共33页第二十九页,共34页。

      •class￿CArea•￿{CShape￿*s[3];•￿public:•CArea(double￿TA￿=￿0.0,￿double￿TB￿=￿0.0,￿double￿TC￿=￿0.0,￿double￿RH￿=￿0.0,￿double￿RW￿=￿0.0,￿double￿CR￿=￿0.0)•{s[0]￿=￿new￿CTriangle(TA,￿TB,￿TC);•￿￿s[1]￿=￿new￿CRect(RH,￿RW);•￿￿s[2]￿=￿new￿CCircle(CR);￿}•~CArea()•￿{￿￿￿delete￿s[0];￿￿￿delete￿s[1];￿￿￿￿delete￿s[2];￿￿￿}•void￿SetData()•￿{s[0]->SetData();￿s[1]->SetData();￿s[2]->SetData();￿￿￿}•double￿GetArea()•{￿return￿s[0]->Area()￿+￿s[1]->Area()￿+￿s[2]->Area();￿}•};第30页/共33页第三十页,共34页 •int￿main()•￿{•CArea￿area(3.0,￿4.0,￿5.0,￿3.0,￿5.0,￿3.0);•￿cout￿<<￿"图形(túxíng)面积之和:"￿<<￿area.GetArea()￿<<￿endl;•￿area.SetData();•￿cout￿<<￿"图形(túxíng)面积之和:"￿<<￿area.GetArea()￿<<￿endl;•￿return￿0;•}第31页/共33页第三十一页,共34页。

      练习(liànxí)7:•定义一个表示三维空间坐标点的类,并对下列运算符重载￿(1)、<<:按￿(x,y,z)￿格式输出(shūchū)该点坐标(坐标为整型);￿(2)、￿>￿:如果A点到原点的距离大于B点到原点的距离,则A>B为真,否则为假￿第32页/共33页第三十二页,共34页 感谢您的欣赏(xīnshǎng)!第33页/共33页第三十三页,共34页 内容(nèiróng)总结通过(tōngguò)基类指针或引用即可访问基类和派生类中的同名函数通过(tōngguò)基类指针或引用即可访问基类和派生类中的同名函数上例用到了虚基类,虚继承例3: 这里用到了什么double area()const{return H*Wint a,b,cinclude "Triangle.h"t1.SetTriangle(4,5,6)t2.SetTriangle(7,8,9)第32页/共33页感谢您的欣赏第33页/共33页第三十四页,共34页。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.