C++通过虚函数实现多态。"无论发送消息的对象属于什么类,它们均发送具有同一形式的消息,对消息的处理方式可能随接收消息的对象而变"的处理方式被称为多态性。而虚函数是通过virtual关键字来限定的。
Virtual 函数(virtual function)
Virtual 是C++ OO(面向对象机制) 机制中很重要的关键字。虚函数就是因为成员函数加了关键字virtual, 可见它的重要性。
简单模型:
在类Base中加入了virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用Derived的print函数而不是Base的print函数。这就是面向对象中多态性体现。
NOTE:函数的重载和此机制是完全不同的
(1)重载的几个函数必须在同一个类中;virtual 函数 相应覆盖的函数必须在有继承关系的不同的类中。
(2)virtual 函数 相应 覆盖的几个函数必须函数名、参数、返回值都相同
重载的函数必须函数名相同,参数不同。参数不同的目的就是为了在函数调用的时候编译器能够通过参数来判断程序是在调用的哪个函数。这也就很自然地解释了为什么函数不能通过返回值不同来重载,因为程序在调用函数时很有可能不关心返回值,编译器就无法从代码中看出程序在调用的是哪个函数了。
(3) virtual 函数 相应的被覆盖函数前必须加关键字virtual
重载和virtual没有任何瓜葛,加不加都不影响重载的动作。
虚拟函数,只有通过基类指针或引用间接指向派生类子类型才会起作用。
In object-oriented programming, a virtual function or virtual method is a function or method whose behavior can be overridden wit