当一个方法声明包含virtual修饰符,这个方法就是虚方法。如果没有virtual修饰符,那么就不是虚方法。
对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。
非虚方法的实现是不变的:不管该方法是被声明该方法的类的实例调用,还是该类的子类所调用,实现的结果都是一样。相比之下,虚方法会在子类中被取代。取代继承的虚方法的过程就是override。
了解面向对象的 都知道 封装、继承、多态三大特点,那么,实现封装使用的是private,实现继承在java中是extends,在C语言中是使用 : +权限+ 基类名, 实现多态,JAVA中就是 用重载和重写来体现的,在C++中多态也是用重载和重写实现的, 而virtual 关键字就是其中最重要的。
作为虚函数,C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。
对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。