C++ -抽象類和純虛函數

 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 */
相關文章
相關標籤/搜索