(原創) 如何使用abstract base class模擬interface? (C/C++)
interface是OO很重要的概念,也是實現abstraction的方法之一,C#、Java都另外提供了interface這個keyword,C++並沒有interface,必須用abstract base class模擬interface。
C++的abstract base class的定義是:若class含有一個以上的pure virtual function,則該class為abstract base class。
/* 2
(C) OOMusou 2007 http://oomusou.cnblogs.com3

4
Filename : AbstractBaseClass.cpp5
Compiler : Visual C++ 8.0 / BCB 6.0 / gcc 3.4.2 / ISO C++6
Description : Demo how to use abstract base class simulate interface7
Release : 03/16/2007 1.08
*/9
#include <iostream>10
#include <string>11

12
using namespace std;13

14
// abstract base class15
// no abstract keyword!!16
class Student {17
public:18
string name;19
20
public: // pure virtual function21
virtual string Job() = 0;22
};23

24
class Bachelor : public Student {25
public:26
Bachelor() {27
this->name = "N/A";28
}29
30
Bachelor(string name) {31
this->name = name;32
}33

34
public:35
// no virtual or override keyword36
string Job() {37
return "Study";38
}39
}; 40

41
int main() {42
Bachelor John("John");43
cout << John.Job() << endl;44
}
執行結果
Study
什麼是pure virtual function呢?21行
virtual string Job() = 0;
將function名稱加上=0後,則為pure virtual function,此function必須被derived class重新override定義。
值得注意的是16行
class Student {
並沒有abstract字眼,所以C++ compiler完全看是否有一個以上的pure virtual function決定此class是否為abstract base class,但C++/CLI則必須加上abstract。
36行derived class要override的member function
string Job() {
return "Study";
}
也不用加上virtual或override,但C++/CLI要強制加上virtual和override。
Conclusion
C++沒有interface,但只要透過abstract base class這個小技巧,仍可實現OO的interface概念。
See Also
(原創) 如何使用abstract base class模擬interface? (初級) (C++/CLI)


Bachelor()
浙公网安备 33010602011771号