在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:看了很多東西,試着寫點部落格,歡迎批評指正,多給點建議。
轉載于:https://www.cnblogs.com/mjk961/p/6442882.html