第十三周实验报告(四)

设计一个抽象类CSolid,含有两个表面积以及体积的纯虚函数。设计个派生类CCube,CBall,CCylinder。分别表示正方体球体以及圆柱体。在main函数中,定义基类的指针P(CSolid *p),利用p的指针输出球体以及圆柱体对象的表面积以及体积。

#include <iostream>
#include <cmath>
const double  pi = 3.1415926;
using namespace std;
class CSolid
{
      public:
      virtual double area ()=0;
      virtual double volume() =0;
};
class CCube:public CSolid
{
      private:
              double length;
      public :
             virtual double area();
             virtual double volume();
             CCube(double length);
             ~ CCube(){};
};
class CBall:public CSolid
{
      private:
              double radius;
      public :
             virtual double area();
             virtual double volume();
             CBall(double radius);
             ~CBall(){};
};
class CCylinder:public CSolid
{
      private:
              double radius;
              double height;
      public :
             virtual double area();
             virtual double volume();
             CCylinder(double radius,double height);
              ~CCylinder(){};
};
double CCube::area()
{
       return pow(this->length,2)*6;
}
double CCube::volume()
{
       return pow(this->length,3);
}
CCube::CCube(double length)
{
                    this -> length = length;
} 

double CBall::area()
{
       return (4*pi*(pow(this->radius,2)));
}
double CBall::volume()
{
       return (4/3)*pi*(pow(this->radius,3));
}
CBall::CBall(double radius)
{
                    this->radius = radius;
}

double CCylinder::area()
{
       return (pow(this->radius,2)*2*pi+2*pi*this->radius*this->height);
}
double CCylinder::volume()
{
       return pi*pow(this->radius,2)*this->height;
} 
 
CCylinder::CCylinder(double radius,double height)
{
                            this -> radius = radius;
                            this -> height = height;
} 
int main()  
{  
    CCube CCube1(12.6);    //建立CCube类对象c1,参数为正方体边长   
    CBall CBall1(4.5);       //建立CBall1类对象CBall1,参数为球的半径   
    CCylinder CCylinder1(4.5,8.4);    //建立CCylinder类对象CCylinder1,参数为圆柱体的半径和高   
    CSolid *p; 
    p=&CCube1;  
    cout<<"totol of CCube areas="<<p->area()<<endl;   //输出表面积   
    cout<<"totol of CCube volume="<<p->volume()<<endl;   //输出体积   
    p=&CBall1;  
   cout<<"totol of CBall areas="<<p->area()<<endl;   //输出表面积   
    cout<<"totol of CBall volume="<<p->volume()<<endl;   //输出体积   
    p=&CCylinder1;  
    cout<<"totol of CCylinder areas="<<p->area()<<endl;   //输出表面积   
    cout<<"totol of CCylinder volume="<<p->volume()<<endl;   //输出体积   
    delete p;
    system("pause");  
    return 0;  
}  


通过这几个任务,我对抽象基类函数的理解,抽象基类函数不作为实类只是作为一个纽带把它的派生类连接起来使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值