【C++ Primer 第15章】抽象基類
阿新 • • 發佈:2018-05-31
*** rim ica include margin urn 對象 class mes
抽象基類
【註意】我們也可以為純虛函數提供定義,不過函數體必須在類的外部,也就是說,我們不能再內部為一個=0思網函數提供函數體。
C++中含有(或未覆蓋直接繼承)純虛函數的類是抽象基類,抽象基類負責定義接口,而後續的的其他類可以覆蓋接口。我們不能直接出創建一個抽象基類的對象。
C++中的純虛函數更像是“只提供申明,沒有實現”,是對子類的約束,是“接口繼承”。
C++中的純虛函數也是一種“運行時多態”。
1 class A 2 { 3 public: 4 virtual void out1(strings) = 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 virtualvoid 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章】抽象基類