1 #include<iostream> 2 #include<math.h> 3 using namespace std; 4 class Shape{ 5 public: 6 virtual double Area()=0; 7 }; 8 class Triangle:public Shape{ 9 double a,b,c; 10 public: 11 Triangle(double e1,double e2,double e3){ 12 a = e1; 13 b = e2; 14 c = e3; 15 } 16 double Area(){ 17 double s = 0.5*(a+b+c); 18 return sqrt(s*(s-a)*(s-b)*(s-c)); 19 } 20 }; 21 class Rectangle:public Shape{ 22 double a,b; 23 public: 24 Rectangle(double e1,double e2){ 25 a = e1; 26 b = e2; 27 } 28 double Area(){ 29 return a*b; 30 } 31 }; 32 class Cricle:public Shape{ 33 public: 34 double Shape::Area(){ 35 36 }//顯式重寫,意義與覆蓋相同 37 }; 38 int main(){ 39 Shape *p; 40 Triangle t(3.0,4.0,5.0); 41 Rectangle r(3.0,4.0); 42 //雖然p是父類指針,由於有virtual ,因此會根據實際對象調用方法。 43 p = &t; 44 cout<<"The area of triangle is :"<<p->Area()<<endl; 45 p = &r; 46 cout<<"The area of rectangle is :"<<p->Area()<<endl; 47 } 48 /* 49 純虛函數:是一個只聲明而不定義的函數。 50 virtual type funcname(prara-list)=0; 51 純虛函數是一個沒有定義的函數,因此包含該函數的類 52 不能被實例化,它只能留到派生類中去實現, 53 因此該類爲抽象類。 54 55 一、只有虛函數纔可以只聲明而不實現。 56 二、若是派生類沒有實現純虛函數的覆蓋,則派生類也屬於抽象類 57 3.其實抽象類的含義指:不能實例化的類,這種類包含兩種: 58 一種是裏面含有純虛函數 59 第二種是構造函數的訪問權限定義爲private或protected 60 四、通常抽象類做爲公共的根。 61 五、雖然抽象類不能被實例化,可是仍然能夠定義抽象類的指針(或引用), 62 該指針(或引用)指向派生類的對象。 63 */