// AbsoluteVirtualFunction.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
#define PI 3.1415926
class container//定义一个抽象类
{
protected :
double radius; //半径
public:
container(double radius)
{
container::radius=radius;
}
virtual void surface_area()=0;//求容器表面积,纯虚函数,此处不能实现,必须在各派生类中实现
virtual void volume()=0;//求容器体积,纯虚函数,此处不能实现,必须在各派生类中实现
};
class cube:public container //定义正方体类
{
public:
cube(double radius):container(radius)//调用基类带参数的构造函数
{
}
void surface_area() //求表面积
{
cout<<"the cube surface area is "<<radius*radius*6<<endl;
}
void volume()//求体积
{
cout<<"the cube volume is "<<radius*radius*radius<<endl;
}
};
class sphere:public container //定义球体类
{
public:
sphere(double radius):container(radius)
{
}
void surface_area()//求表面积
{
cout<<"the sphere surface area is "<<4*PI*radius*radius<<endl;
}
void volume()//求体积
{
cout<<"the sphere volume is "<<4*PI*radius*radius*radius/3<<endl;
}
};
class cylinder:public container //定义圆柱体类
{
double height;
public:
cylinder(double height,double radius):container(radius)
{
cylinder::height=height;
}
void surface_area() //求表面积
{
cout<<"the cylinder surface area is "<< PI*2*radius*height+PI*2*radius*radius<<endl;
}
void volume() //求体积
{
cout<<"the cylinder volume is "<< PI*radius*radius*radius;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
container *ptr; //定义一个基类指针,指到哪里运行到哪里
cube obj1(5);
sphere obj2(5);
cylinder obj3(5,5);
ptr=&obj1; //指向派生类cube的对象,执行cube类版本的surface_area和volume
ptr->surface_area();
ptr->volume();
ptr=&obj2; //指向派生类sphere的对象,执行sphere类版本的surface_area和volume
ptr->surface_area();
ptr->volume();
ptr=&obj3; //指向派生类cylinder的对象,执行cylinder类版本的surface_area和volume
ptr->surface_area();
ptr->volume();
getch();
return 0;
}