1. 程式人生 > >【C++ Primer 第15章】抽象基類

【C++ Primer 第15章】抽象基類

*** rim ica include margin urn 對象 class mes

抽象基類

【註意】我們也可以為純虛函數提供定義,不過函數體必須在類的外部,也就是說,我們不能再內部為一個=0思網函數提供函數體。

C++中含有(或未覆蓋直接繼承)純虛函數的類是抽象基類,抽象基類負責定義接口,而後續的的其他類可以覆蓋接口。我們不能直接出創建一個抽象基類的對象。

  C++中的純虛函數更像是“只提供申明,沒有實現”,是對子類的約束,是“接口繼承”。

  C++中的純虛函數也是一種“運行時多態”。

1 class A
2 {
3 public:
4     virtual void out1(string
s) = 0; 5 virtual void out2(string s) 6 { 7 cout << "A(out2):" << s <<endl; 8 } 9 };

程序綜合實例:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     virtual void out1() = 0;
 8     virtual ~A() {};
 9     virtual
void out2() 10 { 11 cout << "A(out2)" << endl; 12 } 13 14 void out3() 15 { 16 cout << "A(out3)" << endl; 17 } 18 }; 19 20 class B :public A 21 { 22 public: 23 virtual ~B() {}; 24 void out1() 25 { 26 cout << "
B(out1)" << endl; 27 } 28 29 void out2() 30 { 31 cout << "B(out2)" << endl; 32 } 33 34 void out3() 35 { 36 cout << "B(out3)" << endl; 37 } 38 }; 39 40 int main() 41 { 42 A *ab = new B; 43 ab->out1(); 44 ab->out2(); 45 ab->out3(); 46 47 cout << "************************" << endl; 48 49 B *bb = new B; 50 bb->out1(); 51 bb->out2(); 52 bb->out3(); 53 54 delete ab; 55 delete bb; 56 return 0; 57 }

輸出結果:

技術分享圖片

15.4節練習

【C++ Primer 第15章】抽象基類