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的接口不能被实例化的想法(除去内部匿名类)一致。

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