设计基类clrcle(),定义成员函数area(),用来求圆的面积。然后有circle派生出球的类globle和圆柱体的类cylinder,并在两个派生类中的定义成员函数area(),用来求圆柱和球的表面积
#include<iostream.h>
const doublep=3.14;
class circle
{
protected:
double r;
public:
circle(){}
circle(double rr){r=rr;}
virtual double area() //基类中的虚函数
{
return p*r*r;
}
virtual void display() //基类中的虚函数
{
cout<<"圆的半径为"<<r<<endl;
}
};
classgloble:public circle
{
public:
globle(double rr):circle(rr){}
virtual double area() //派生类中的虚函数与基类中的虚函数有不同的实现
{
return 4*p*r*r;
}
virtual void display()//派生类中的虚函数与基类中的虚函数有不同的实现
{
cout<<"球的半径为"<<r<<endl;
}
};
classcylinder:public circle
{
protected:
double h;
public:
cylinder(){}
cylinder(double rr,double hh):circle(rr)
{
h=hh;
}
virtual double area() //派生类中的虚函数与基类中的虚函数有不同的实现
{
return 2*p*r*r+2*p*r*h;
}
virtual void display()//派生类中的虚函数与基类中的虚函数有不同的实现
{
cout<<"圆柱体的地面半径为"<<r<<"高为"<<h<<endl;
}
};
void fun(circle&c)
{
c.display();
}
void main()
{
circle cir(2),*p;
globle glo(3);
cylinder cyl(4,2);
cout<<"通过对象来调用相应的虚函数"<<endl; //这样的调用不会实现多态性
cir.display();
cout<<"圆的面积"<<cir.area()<<endl;
glo.display();
cout<<"球的表面积"<<glo.area()<<endl;
cyl.display();
cout<<"圆柱体的表面积"<<cyl.area()<<endl;
cout<<"通过引用和指针来调用相应的虚函数"<<endl; //实现多态性
fun(cir);
p=○
cout<<"圆的面积"<<p->area()<<endl;
fun(glo);
p=&glo;
cout<<"球的表面积"<<p->area()<<endl;
fun(cyl);
p=&cyl;
cout<<"圆柱体的表面积"<<p->area()<<endl;
}