/* 理解纯虚函数的意义和用法 */
#include<iostream>
using namespace std;
class container{ //声明抽象类container
protected:
double radius;
public:
container(double radius1);
virtual double surface_area()=0; //纯虚函数
virtual double volume()=0;
};
container::container(double radius1)
{ radius=radius1;
}
class cube:public container //声明一个正方体派生类cube
{ public:
cube(double radius1):container(radius1)
{ }
double surface_area() //定义虚函数surface_area
{ return 6*radius*radius;
}
double volume() //定义虚函数volume
{ return radius*radius*radius;
}
};
class sphere:public container //声明一个球体派生类
{ public:
sphere(double radius1):container(radius1)
{ };
double surface_area() //纯虚函数surface_area
{ return 4*3.1416*radius*radius;
}
double volume() //纯虚函数volume
{ return 3.1416*radius*radius*radius*4/3;
}
};
class cylinder: public container //声明一个圆柱体派生类cylinder
{ double height;
public:
cylinder(double radius1,double height1):container(radius1)
{ height=height1;
}
double surface_area() //定义虚函数surface_area
{ return 2*3.1416*radius*(radius+height);
}
double volume() //定义虚函数volume
{ return 3.1416*radius*radius*height;
}
};
int main()
{ container *ptr;
cube obj1(2.0);
sphere obj2(2.0);
cylinder obj3(2.0,3.0);
ptr=&obj1;
cout<<"正方体的表面积是:"<<ptr->surface_area()<<endl;
cout<<"正方体的体积是:"<<ptr->volume()<<endl<<endl;
ptr=&obj2;
cout<<"球体表面积是:"<<ptr->surface_area()<<endl;
cout<<"球体的体积是:"<<ptr->volume()<<endl<<endl;
ptr=&obj3;
cout<<"圆柱体的表面积是:"<<ptr->surface_area()<<endl;
cout<<"圆柱体的体积是:"<<ptr->volume()<<endl;
system("pause");
return 0;
}