目录
1.先定义容器类Container(抽象类的公共基类)
class Container {
public:
Container(double h) {
height=h; //简单的方法初始化h
}
virtual double getvolumn()=0; //纯虚函数
protected:
double height;
};
正方体和圆柱体的共有数据成员height,所以定义为public公共的属性;
再将获取体积getvolumn()定义为纯虚函数。
因为要在派生类中调用height,故将height定义为保护型(protected)。
(private私有型派生类不能访问,但protected可以访问)
2. 定义派生类Cube,计算正方体的体积
class Cube:public Container {
public:
Cube(double l, double w, double h):Container(h) {
length=l;
width=w;
}
virtual double getvolumn() {
return length*width*height; //返回值为正方体的体积
}
private: //cube的私有成员
double length;
double width;
};
主函数中利用指针调用getvolumn来输出体积。
length和width是派生类cube的私有成员
3.定义派生类Cylinder,计算圆柱体的体积
class Cylinder:public Container {
public:
Cylinder(double r, double h):Container (h) {
radius=r;
height=h;
}
virtual double getvolumn() {
return PI*radius*radius*height;
}
private:
double radius;
};
与Cube的方法一样。
4.主函数
int main(){
Container *p; //定义指针变量p
Cube cube(10,20,30);
p=&cube; //获得输入的长宽高
cout<<"长方体的体积为"<<p->getvolumn()<<endl;
Cylinder cylinder(10,20);
p=&cylinder; //获得输入的半径和高
cout<<"圆柱体的体积为"<<p->getvolumn()<<endl;
return 0;
}
用基类Container定义指针变量p,输入cube的长宽高,指针p动态调用基类和派生类虚函数中的getvolumn,显示cube的体积,同理,显示cylinder的体积。