在Java中定義個接口,之后可以定義不同的類來實現接口,如果有個函數的參數為這個接口的話,就可以對各自的類做出不同的響應。
如:
interface animal { public void info(); } class dog implements animal { public void info() { System.out.println("dog class"); } } class cat implements animal { public void info() { System.out.println("cat class"); } } class func{ public void act(animal a) { a.info(); } } public class test{ public static void main(String []args) { dog d = new dog(); cat c = new cat(); func f = new func(); f.act(d); f.act(c); } }
而在C++中,沒有接口的定義,我們可以定義抽象類來實現像Java中的接口功能。
包含純虛函數的類就是抽象類不能實例化,純虛函數可以定義為:(本文不考慮函數參數)
virtual type functionname()=0;
如:
#include <iostream> using namespace std; class animal { public: virtual void info()=0; }; class dog:public animal { void info() { cout << "dog class" << endl; } }; class cat:public animal { void info() { cout << "cat class" << endl; } }; void test(animal &a) { a.info(); } int main() { dog d; cat c; test(d); test(c); return 0; }
上述程序實現結果與Java中一樣。
接口和抽象類都不能實例化,但是在C++中如果在類中只是聲明為虛函數,還是可以進行實例化的,不嚴格地說,也是可以當做接口來用。
虛函數定義為:
virtual type functionname(){/*函數體定義*/}
#include <iostream> using namespace std; class animal{ public: virtual void info(){ cout<<"animal class."<<endl; } }; class dog:public animal{ public: void info(){ cout<<"dog class."<<endl; } }; class cat:public animal{ public: void info(){ cout<<"cat class."<<endl; } }; void test(animal& a) { a.info(); } int main() { animal a; dog d; cat c; test(a); test(d); test(c); return 0; }
在C++中定義虛函數是在函數前加個virtual關鍵字,上面例子的結果為:
如果在基類(animal)函數中沒有加virtual關鍵字的話,就會輸出:
ps:看了很多東西,試着寫點博客,歡迎批評指正,多給點建議。