//container.h
#pragma once
#include<iostream>
using namespace std;
#define PI 3.14
class container
{
protected:
double radius;
public:
container(double radius)
{
container::radius = radius;
}
virtual double surfaceArea() = 0;
virtual double volum() = 0;
virtual void print() = 0;
};
class cube :public container
{
public:
cube(double radius) :container(radius){}
double surfaceArea()
{
return radius*radius;
}
double volum()
{
return radius*radius*radius;
}
virtual void print()
{
cout << "正方体表面积为:" << this->surfaceArea() << endl;
cout << "正方体体积为:" << this->volum() << endl;
}
};
class sphere :public container
{
public:
sphere(double radius) :container(radius){}
double surfaceArea()
{
return 4 * PI*radius*radius;
}
double volum()
{
return PI*radius*radius*radius * 4 / 3;
}
virtual void print()
{
cout << "球表面积为:" << this->surfaceArea() << endl;
cout << "球体积为:" << this->volum() << endl;
}
};
class cylinder :public container
{
double height;
public:
cylinder(double radius, double height) :container(radius)
{
this->height = height;
}
double surfaceArea()
{
return 2 * PI*radius*(radius + height);
}
double volum()
{
return PI*radius*radius*height;
}
virtual void print()
{
cout << "圆柱表面积为:" << this->surfaceArea() << endl;
cout << "圆柱体积为:" << this->volum() << endl;
}
};
//main.cpp
#include "container.h"
#include<iostream>
using namespace std;
void main()
{
container*p;
cube c1(10);
sphere s1(6);
cylinder cy1(4, 5);
p = &c1;
p->print();
p = &s1;
p->print();
p = &cy1;
p->print();
}