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