问题及代码:
/*
*Copyright (c) 2016,烟台大学计算机学院
*All rights reserved.
*文件名称:zwj.cpp
*作 者:张伟晶
*完成日期:2016年5月25日
*版 本 号:v1.0
*
*问题描述:立体类族共有的抽象类
*输入描述:
*程序输出:
*/
#include<iostream>
using namespace std;
//基类
class CSolid
{
public :
virtual double area() const=0;//面积
virtual double tiji() const=0;//体积
};
///正方体
class CCube:public CSolid
{
private:
double chang,kuan,gao;
public :
CCube(double cha,double kua,double ga):chang(cha),kuan(kua),gao(ga){}
double area() const;
double tiji() const;
};
/******/
double CCube::area() const
{
return chang*kuan*2+chang*gao*2+kuan*gao*2;
}
double CCube::tiji() const
{
return chang*kuan*gao;
}
///球体
class CBall:public CSolid
{
private:
double banjing;
public:
CBall(double ban):banjing(ban){}
double area() const;
double tiji() const;
};
/*******/
double CBall::area() const
{
return 4*3.14159*banjing*banjing;
}
double CBall::tiji() const
{
return 4*3.14159*banjing*banjing/3;
}
///圆柱体
class CCylinder:public CSolid
{
private:
double banjing,gao;
public:
CCylinder(double ban,double ga):banjing(ban),gao(ga){}
double area() const ;
double tiji() const ;
};
double CCylinder::area() const
{
return 3.14159*banjing*banjing*2+2*3.14159*banjing*gao;
}
double CCylinder::tiji() const
{
return 3.14159*banjing*banjing*gao;
}
int main()
{
CCube c1(2.1,2.1,2.1);
CBall b1(2.5);
CCylinder r1(2.5,3.0);
CSolid *pt[3]= {&c1,&b1,&r1}; //定义基类指针数组pt,使它每一个元素指向一个派生类对象
cout<<"长方体表面积:"<<pt[0]->area()<<" 长方体体积:"<<pt[0]->tiji()<<endl;
cout<<"球体的表面积:"<<pt[1]->area()<<" 球体的体积:"<<pt[1]->tiji()<<endl;
cout<<"圆柱的表面积:"<<pt[2]->area()<<" 圆柱的体积:"<<pt[2]->tiji()<<endl;
return 0;
}
运行结果: