1. 程式人生 > >抽象類 純虛函數

抽象類 純虛函數

code space 構造函數 point 構造 red ostream 意義 led

 1 #include <iostream>
 2 using namespace std;
 3 /************************************************************************/
 4 /*抽象類不能定義對象,為了強調一個類為抽象類,可將該類的構造函數說明為保護的訪問控制權限 
 5 抽象類只用作基類,其純虛函數的實現由派生類給出
 6 如果派生類定義了純虛函數,該派生類就可以當做具體類,不定義仍然是抽象類
 7 /***********************************************************************
*/ 8 class point //抽象類: 帶有純虛函數的類為抽象類 9 { 10 public: 11 point(int i=0,int j=0) 12 { 13 x0=i; 14 y0=j; 15 } 16 virtual void set()=0; //純虛函數 在基類中不對函數做有意義的實現,將它說明為純虛函數,其實現留給基類的派生類去做 virtual <函數類型><函數名><(參數表)>=0 17 virtual void draw()=0; 18 19 protected: 20 int
x0,y0; 21 }; 22 23 class line:public point //line為抽象類point的派生類,並重新定義了基類的純虛函數 24 { 25 public: 26 line(int i=0,int j=0,int m=0,int n=0):point(i,j) 27 { 28 x1=m,y1=n; 29 } 30 void set() 31 { 32 cout<<"line::set() called.\n"; 33 } 34 void draw() 35 { 36 cout<<"
line::draw() called.\n"; 37 } 38 protected: 39 int x1,y1; 40 }; 41 42 43 class ellipse:public point 44 { 45 public: 46 ellipse(int i=0,int j=0,int p=0,int q=0):point(i,j) 47 { 48 x2=p,y2=q; 49 } 50 void set() 51 { 52 cout<<"ellipse::set() called.\n"; 53 } 54 void draw() 55 { 56 cout<<"ellipse::draw() called.\n"; 57 } 58 protected: 59 int x2,y2; 60 }; 61 void drawobj(point *p) 62 { 63 p->draw(); 64 } 65 void setobj(point *p) 66 { 67 p->set(); 68 } 69 void main() 70 { 71 line *lineobj=new line; 72 ellipse *elliobj=new ellipse; 73 drawobj(lineobj); 74 drawobj(elliobj); 75 cout<<endl; 76 setobj(lineobj); 77 setobj(elliobj); 78 cout<<"\nRedraw the object...\n"; 79 drawobj(lineobj); 80 drawobj(elliobj); 81 system("pause"); 82 } 83 /*純虛函數只能作為基類來使用,其純虛函數的實現是由派生類給出的。 84 如果派生類沒有重新定義純虛函數,而只是集成基類的純虛函數,則這個派生類仍然還是一個抽象類,不能直接使用 85 */

抽象類 純虛函數