//李春葆 p258 例44 多态性与虚函数 纯虚函数-抽象类
#include <iostream>
#include <cstdio>
using namespace std;
class Container{
protected:
double radius;
public:
Container(double radius){
Container::radius = radius;
}
virtual double surface_area()=0;
virtual double volume()=0;
};
class cube:public Container{
public:
cube(double radius):Container(radius){}; //分号是否添加 codeblocks 都正确
double surface_area(){
return radius*radius*6;
}
double volume(){
return radius*radius*radius;
}
};
class sphere:public Container{
public:
sphere(double radius):Container(radius){}
double surface_area(){
return radius*radius*4*3.14;
}
double volume(){
return radius*radius*radius*3.14*4/3;
}
};
class cylinder:public Container{
double height;
public:
cylinder(double radius,double height):Container(radius){
cylinder::height = height;
}
double surface_area(){
return 2*3.14*radius*(height+radius);
}
double volume(){
return 3.14*radius*radius*height;
}
};
int main(){
Container *p;
cube obj1(5);
sphere obj2(5);
cylinder obj3(5,5);
p = &obj1;
cout<<"正方体表面积"<<p->surface_area()<<endl;
cout<<"正方体体积"<<p->volume()<<endl;
p = &obj2;
cout<<"球体表面积"<<p->surface_area()<<endl;
cout<<"求体体积"<<p->volume()<<endl;
p = &obj3;
cout<<"圆柱体表面积"<<p->surface_area()<<endl;
cout<<"圆柱体体积"<<p->volume()<<endl;
return 0;
}