#include<iostream>
#include<Cmath>
using namespace std;
const double P = 3.14;
class CSolid//定义虚基类
{
public:
virtual double area() const = 0;//定义纯虚函数
virtual double volume() const = 0;//定义虚函数
};
class CCube:public CSolid
{
public:
CCube(double l);
~CCube();
double area() const;
double volume() const;
double getl();
private:
double len;
};
class CBall:public CSolid
{
public:
CBall(double r);
~CBall();
double area() const;
double volume() const;
double getr1();
private:
double rang;
};
class CCylinder:public CSolid
{
public:
CCylinder(double r, double h);
~CCylinder();
double area() const;
double volume() const;
double getr2();
double geth();
private:
double rang;
double high;
};
CCube::CCube(double l):len(l){}
CCube::~CCube(){}
double CCube::area() const
{
return 6 * len * len;
}
double CCube::volume() const
{
return len * len * len;
}
double CCube::getl()
{
return len;
}
CBall::CBall(double r):rang(r){}
CBall::~CBall(){}
double CBall::area() const
{
return 4 * P * rang * rang;
}
double CBall::volume() const
{
return ( 4 * P * rang * rang * rang) / 3;
}
double CBall::getr1()
{
return rang;
}
CCylinder::CCylinder(double r, double h):rang(r), high(h){}
CCylinder::~CCylinder(){}
double CCylinder::area() const
{
return ((2 * P * rang * rang) + (2 * P * rang) * high );
}
double CCylinder::volume() const
{
return P * rang * rang * high;
}
double CCylinder::getr2(){return rang;}
double CCylinder::geth(){return high;}
int main()
{
CCube c1(1);
CBall c2(2);
CCylinder c3(3, 4);
CSolid *p;
p = &c1;
cout << "边长为 " <<c1.getl() << " 的长方体的面积为: ";
cout << p -> area() << endl;
cout << "边长为 " << c1.getl() << " 的长方体的体积为: ";
cout << p -> volume() << endl << endl;
p = &c2;
cout << "半径为 " << c2.getr1() << " 的球体的面积为: ";
cout << p -> area() << endl;
cout << "半径为 " <<c2.getr1() << " 的球体的体积为: ";
cout << p -> volume() << endl << endl;
p = &c3;
cout << "半径为 " << c3.getr2() <<", 高为 " << c3.geth() << " 的圆柱体的面积为: ";
cout << p -> area() << endl;
cout << "半径为 " << c3.getr2() <<", 高为 " << c3.geth() << " 的圆柱体的体积为: ";
cout << p -> volume() << endl;
system("pause");
return 0;
}