虛函數

虛函數是爲了實現一個接口多種處理,把基類中相關的函數設置爲虛函數,然後在各個派生類中設置各自的處理方式(即各自與基類的虛函數所相關的函數的執行語句),在其它函數(如主函數)調用時,可以直接用基類的引用或是基類指針指向派生類即可實現動態鏈編!!!純虛函數沒有函數體,抽象類是用來繼承的。
#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;
}
 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章