c++之——抽象基類


在一個虛函數的聲明語句的分號前加上 =0;就可以將一個虛函數變成純虛函數,其中,=0只能出現在類內部的虛函數聲明語句處。純虛函數只用聲明,而不用定義,其存在就是為了提供接口,含有純虛函數的類是抽象基類。我們不能直接創建一個抽象基類的對象,但可以創建其指針或者引用。值得注意的是,你也可以為純虛函數提供定義,不過函數體必須定義在類的外部。但此時哪怕在外部定義了,也是純虛函數,不能構建對象。

派生類構造函數只初始化它的直接基類。多繼承的虛繼承除外。

eg:

 

 1 #include<iostream>
 2 using namespace std;  3 //四邊形
 4 class Quadrilateral {  5 public:  6     virtual void print_area() = 0;  7 };  8 //正方形
 9 class Square :public Quadrilateral 10 { 11 public: 12     Square(int c):a(c){} 13      void print_area()override
14  { 15          cout << "square " << a*a << endl; 16  } 17 private: 18     int a; 19 
20 }; 21 //矩形
22 class Rectangle:  public Quadrilateral 23 { 24 public: 25     Rectangle(int a,int b) :R_long(a),R_width(b) 26  { 27         
28  } 29     void print_area()override
30  { 31         cout << "rectangle " << R_long*R_width << endl; 32  } 33 private: 34     int R_long; 35     int R_width; 36 }; 37 
38 void paly(Quadrilateral &obj) 39 { 40  obj.print_area(); 41 } 42 int main() 43 { 44     Square s1(10); 45     Rectangle r1(10, 20); 46  paly(s1); 47  paly(r1); 48 
49     return 0; 50 }

 

這樣用純虛函數構建的抽象基類,能夠為架構提供接口,如果現在要在前人代碼的基礎上增加一個平行四邊形的面積打印,只用增加一個平行四邊形的類,調用paly函數,不用再去更改原有的任何代碼,而是在原有正確代碼的基礎上復用,這是構架的基礎。純虛函數應該在派生類中重寫,否則派生類也是抽象類,不能實例化。

就像友元關系不能傳遞一樣,友元關系同樣不能繼承,基類的友元在訪問派生類成員時不具有特殊性,類似的,派生類的友元也不能隨意訪問基類的成員。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM