虚函数

虚函数是为了实现一个接口多种处理,把基类中相关的函数设置为虚函数,然后在各个派生类中设置各自的处理方式(即各自与基类的虚函数所相关的函数的执行语句),在其它函数(如主函数)调用时,可以直接用基类的引用或是基类指针指向派生类即可实现动态链编!!!纯虚函数没有函数体,抽象类是用来继承的。
#include<iostream>
using namespace std;
class shape
{
public:
shape(double x)
{r=x;}
virtual void area()=0;
virtual void perimeter()=0;
double GetR(){return r;}
private:
double r;
};
class round :public shape
{
public:
 round(double x):shape(x){}
 void area()
 {
  cout<<"圆的面积是:"<<3.14159*shape::GetR()*shape::GetR()<<endl;
 }
 void perimeter()
 {
  cout<<"圆的周长是:"<<3.14159*2*shape::GetR()<<endl;
 }

};
class nz:public shape
{
public:
 nz(double x):shape(x){}
 void area()
 {
  cout<<"圆内接正方形的面积是:"<<(shape::GetR())*(shape::GetR())*2<<endl;
 }
 void perimeter( )
 {
  cout<<"圆内接正方形的周长是:"<<shape::GetR()*1.41421*4<<endl;
 }
};
class wz:public shape
{
public:
 wz(double x):shape(x){}
 void area( )
 {
  cout<<"圆外接正方形的面积是:"<<4*shape::GetR()*shape::GetR()<<endl;
 }
 void perimeter()
 {
  cout<<"圆外接正方形的周长是:"<<shape::GetR()*8<<endl;
 }
};
void jisuan(shape *xx)
{
 xx->area();
 xx->perimeter();
}
int main()
{
 double d;
 cin>>d;
 round x(d);
 nz y(d);
 wz z(d);
 jisuan(&x);
 jisuan(&y);
 jisuan(&z);
 return 0;
}
 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值