附加静态联编动态联编多态实例.doc_第1页
附加静态联编动态联编多态实例.doc_第2页
附加静态联编动态联编多态实例.doc_第3页
附加静态联编动态联编多态实例.doc_第4页
附加静态联编动态联编多态实例.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序代码:(1)静态联编的例子试图显示派生类信息#include #include using namespace std; class CShape /基类 public: double Perimeter()return 0;/计算周长double Area()return 0; /计算面积; class CRectangle:public CShape /矩形private:double w,h; public: CRectangle(double x,double y)w=x;h=y;double Perimeter()return (w+h)*2;/同名覆盖double Area()return w*h; /同名覆盖; class CCircle:public CShape /圆private:double r; public: CCircle(double x)r=x; double Perimeter()return 3.1415926*r*2;/同名覆盖double Area()return 3.1415926*r*r; /同名覆盖; class CTriangle:public CShape /三角形private:double a,b,c; public: CTriangle(double x,double y,double z)a=x,b=y,c=z; double Perimeter()return a+b+c;/同名覆盖double Area()/计算圆的面积double p = ( a + b + c) / 2.0; return sqrt(p * ( p - a)*(p- b)*(p - c); /全局函数show()显示各种形状的周长和面积void show(CShape & s) cout 周长: s.Perimeter() endl;cout 面积: s.Area() endl;int main() CCircle cl(5.0);cout圆的信息:endl;show(cl);cout*endl;CRectangle rect(100,50);cout矩形的信息:endl;show(rect);cout*endl;CTriangle tri(3,4,5);cout三角形的信息:endl;show(tri);return 0; 程序运行结果:圆的信息:周长:0面积:0*矩形的信息:周长:0面积:0*三角形的信息:周长:0面积:0 (2)动态联编的例子(使用基类指针)#include #include using namespace std; class CShape /基类 public: virtual double Perimeter()return 0;/虚函数,计算周长virtual double Area()return 0; /虚函数,计算面积; class CRectangle:public CShape /矩形private:double w,h; public: CRectangle(double x,double y)w=x;h=y;double Perimeter()return (w+h)*2;/同名覆盖double Area()return w*h; /同名覆盖; class CCircle:public CShape /圆private:double r; public: CCircle(double x)r=x; double Perimeter()return 3.1415926*r*2;/同名覆盖double Area()return 3.1415926*r*r; /同名覆盖; class CTriangle:public CShape /三角形private:double a,b,c; public: CTriangle(double x,double y,double z)a=x,b=y,c=z; double Perimeter()return a+b+c;/同名覆盖double Area()/计算圆的面积double p = ( a + b + c) / 2.0; return sqrt(p * ( p - a)*(p- b)*(p - c); /全局函数show()显示各种形状的周长和面积void show(CShape * p) cout 周长: Perimeter() endl;cout 面积: Area() endl;int main() CCircle cl(5.0);cout圆的信息:endl;show(&cl);cout*endl;CRectangle rect(100,50);cout矩形的信息:endl;show(&rect);cout*endl;CTriangle tri(3,4,5);cout三角形的信息:endl;show(&tri);return 0; 程序运行结果:圆的信息:周长:31.4159面积:78.5398*矩形的信息:周长:300面积:5000*三角形的信息:周长:12面积:6(3)动态联编的例子改进(使用基类引用)#include #include using namespace std; class CShape /基类 public: virtual double Perimeter()return 0;/虚函数,计算周长virtual double Area()return 0; /虚函数,计算面积; class CRectangle:public CShape /矩形private:double w,h; public: CRectangle(double x,double y)w=x;h=y;double Perimeter()return (w+h)*2;/同名覆盖double Area()return w*h; /同名覆盖; class CCircle:public CShape /圆private:double r; public: CCircle(double x)r=x; double Perimeter()return 3.1415926*r*2;/同名覆盖double Area()return 3.1415926*r*r; /同名覆盖; class CTriangle:public CShape /三角形private:double a,b,c; public: CTriangle(double x,double y,double z)a=x,b=y,c=z; double Perimeter()return a+b+c;/同名覆盖double Area()/计算圆的面积double p = ( a + b + c) / 2.0; return sqrt(p * ( p - a)*(p- b)*(p - c); /全局函数show()显示各种形状的周长和面积void show(CShape & s) /全局函数的形参为基类引用cout 周长: s.Perimeter() endl;cout 面积: s.Area() endl;int main() CCircle cl(5.0);cout圆的信息:endl;show(cl);/函数的实参为派生类对象,下同cout*endl;CRectangle rect(100,50);cout矩形的信息:endl;show(rect);cout*endl;CTriangle tri(3,4,5);cout三角形的信息:Hurted( nPower); pWolf-FightBack( this); void Attack( CGhost * pGhost) /表现攻击动作的代码pGhost-Hurted( nPower); pGohst-FightBack( this); void Hurted ( int nPower) / 表现受伤动作的代码nLifeValue -= nPower; void FightBack( CWolf * pWolf) / 表现反击动作的代码pWolf -Hurted( nPower / 2); void FightBack( CGhost * pGhost) / 表现反击动作的代码pGhost-Hurted( nPower / 2 ); (5) 游戏魔法门之英雄无敌多态的实现方法(部分代码)/基类CCreature:class CCreature protected : int m_nLifeValue, m_nPower; public: virtual void Attack( CCreature * pCreature) virtual void Hurted( int nPower) virtual void FightBack( CCreature * pCreature) ; /派生类 CDragon: class CDragon : public CCreature public: virtual void Attack( CCreature * pCreature); virtual void Hurted( int nPower); virtual void FightBack( CCreature * pCreature); ; void CDragon:Attack(CCreature * p) /表现攻击动作的代码p-Hurted(m_nPower); /多态 p-FightBack(this); /多态 void CDragon:Hurted( int nPower) /表现受伤动作的代码m_nLifeValue -= nPower; void CDragon:FightBack(CCreature * p) /表现反击动作的代码p-Hurted(m_nPower/2); /多态 (6) 游戏魔法门之英雄无敌多态的实现方法(部分代码)#include #include #include using namespace std; class CShape public: virtual double Area() = 0; /纯虚函数virtual void PrintInfo() = 0; ; class CRectangle:public CShape public: int w,h; virtual double Area(); virtual void PrintInfo(); ; class CCircle:public CShape public: int r; virtual double Area(); virtual void PrintInfo(); ; class CTriangle:public CShape public: int a,b,c; virtual double Area(); virtual void PrintInfo(); ; double CRectangle:Area() return w * h; void CRectangle:PrintInfo() cout Rectangle: Area() endl; double CCircle:Area() return 3.14 * r * r ; void CCircle:PrintInfo() cout Circle: Area() endl; double CTriangle:Area() double p = ( a + b + c) / 2.0; return sqrt(p * ( p - a)*(p- b)*(p - c); void CTriangle:PrintInfo() cout Triangle: Area() n; for( i = 0;i c; switch(c) case R: pr = new CRectangle(); cin pr-w pr-h; pShapesi = pr; break; case C: pc = new CCircle(); cin pc-r; pShapesi = pc; break; case T: pt = new CTriangle(); cin pt-a pt-b pt-c; pShapesi = pt; break; qsort(pShapes,n,sizeof( CShape*),MyCompare); for( i = 0;i PrintInfo(); return 0; int MyCompare(const void * s1, const void * s2) double a1,a2; CShape * * p1 ; / s1,s2 是void * ,不可写“* s1”来取得s1指向的内容CShape * * p2; p1 = ( CShape * * ) s1; /s1,s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论