虚函数的调用

 

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

 

 

 

 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值