百度首页 | 百度空间
 
查看文章
 
实验九(下)
2007-11-24 11:34

2)编写一个程序计算正方形、球体和圆柱体的表面积和体积。

分析:依题意,抽象出一个公共基类CContaineer为抽象类,在其中定义求表面积和体积的虚函数(该抽象类本身没有表面积和体积可言)。抽象类中定义一个公共的数据成员radius,此数据可作为球体的半径、正方形的边长、圆柱体底面积圆半径。由此抽象类派生出要描述的三个类,在这三个类中都具有求表面积和体积的重定义版本。

源程序如下:

#include<iostream.h>

class CCt               //定义抽象类CContaineer

{protected:

float radius;            //公共的数据成员radius

double area,volume;     //表面积area,体积volume

public:

   virtual void Area()=0;   //求表面积的纯虚函数

   virtual void Volume()=0; //求体积的纯虚函数

   CCt (floata,double b,double c){radius=a;area=b;volume=c;}    //基类的构造函数

};

class Square:public CCt //派生类Square

{

public:

Square(float a,double b,double c): CCt (a,b,c)

   {}

   void Area()            //虚函数Area()

   {area=6*radius*radius;

   cout<<"Square's area="<<area<<endl;

   }

   void Volume() //虚函数Volume ()

   {volume=radius*radius*radius;

     cout<<" Square's volume="<<volume<<endl;}

};

class circle:public CCt //派生类circle

{

public:

   circle(float a,double b,double c): CCt (a,b,c)

   {}                           //派生类circle构造函数

   void Area()

   {area=4*3.14*radius*radius;

   cout<<"circle's area="<<area<<endl;

   }

   void Volume()

   {volume=3.14*radius*radius*radius*4/3;

   cout<<" circle's volume="<<volume<<endl;}

};

class CCt linder:public CCt

//派生类CCt linder

{float high;

public:

   CCt linder(float h,float r,double a,double v): CCt (r,a,v)

   {high=h;}

   void Area()       //派生类CCtlinder的虚函数定义

   {area=2*3.14*radius*radius+2*3.14*radius*high;

   cout<<" CCt linder's area="<<area<<endl;

   }

   void Volume()

   {   volume=3.14*radius*radius*high;

      cout<<" CCt 's volume="<<volume<<endl;}

};

void Areafun(CCt *p)//根据p所指向的对象不同,调用              不同的派生类Area

{p->Area();}

void Volumefun(CCt *p) //根据p所指向的对象不同,调用不同的派生类Volume

{p->Volume();}

void main()

{Square r1(5,0,0);// Square的对象r1

circle c1(8,0,0); // circle的对象c1

CCt linder cc2(2,14,0,0); // CCt linde的对象cc2

Areafun(&r1);//调用的将是派生类SquareArea虚函数

Volumefun(&r1);// 调用的将是派生类SquareVolume虚函数

Areafun(&c1);

Volumefun(&c1);

Areafun(&cc2);

Volumefun(&cc2);

}运行结果:

Square's area=150

Square's volume=125

circle's area=803.84

circle's volume=2143.57

CCt 's area=1406.72

CCt 's volume=1230.88

Press any key to continue

总结:通过实验,初步掌握了虚函数、纯虚函数和抽象类的定义和使用。


类别:学习分享 | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2008-06-29 11:38
有错的程序也能运行出结果???
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu