java與c++中多態的實現聯繫與區別

java與c++中多態的實現區別

這個java簡單的例子的輸出是animal move,體現了多態的含義。

public class Test {
	public static void main(String []args){
		Animal animal = new Dog();
		animal.move();
	}
}
class Animal{
	void move(){
		System.out.println("animal move");
	}
}
class Dog extends Animal{
    @Override
	void move() {
		System.out.println("dog move");
	}
}

而c++中,則需要引入virtual這個關鍵字對函數修飾,成爲虛函數,對應引入的還有虛函數表這個概念:
1.運行時需要額外的內存將函數信息進行存儲,使用正確指向函數的指針。
2.每次調用虛函數都會遍歷虛函數表查詢使用了哪個虛函數。

#include <iostream>
#include<string>
using namespace std;
class Animal {
public:
	void Move() {
		cout << "animal move" << endl;
	}

};
class Dog : public Animal {
public:
	virtual void Move() override { //override僅僅取表示重寫方法作用             //,可以省略,類似java中的@Override
		cout << "dog move" << endl;
	}
};
int main() {
	Animal *a = new Dog();
	a->Move();
	std::cin.get();//暫停vs控制檯作用(getchar())
	return 0;
}

此外,如果基類Animal中改爲virtual void Move() = 0;不提供具體實現,在c++中這被稱爲純虛函數,然後實現交給子類重寫,就也是java中接口的概念,當然此時不可以寫Animal *a = new Animal(),這和java的接口不能被實例化的想法(除去內部匿名類)一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章