虚函数的调用

来源:互联网 发布:mp3歌曲批量下载软件 编辑:程序博客网 时间:2024/06/10 07:38

 

设计基类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=&cir;

  cout<<"圆的面积"<<p->area()<<endl;

  fun(glo);

  p=&glo;

  cout<<"球的表面积"<<p->area()<<endl;

  fun(cyl);

  p=&cyl;

  cout<<"圆柱体的表面积"<<p->area()<<endl;

 

 

 

 

}

原创粉丝点击