多态其实就是弊悉谨用虚函数来实现的,程序可以在运行时来决定具体调用哪个函数。事实上,如果子类重载了父类的某个函数,没有特殊的理由,一般需要将它申明为虚函数。举个一般常见的例子:
class Shape
{
//...
virtual void draw() = 0; //=0表示纯虚的
};
class Rectangle
{
virtual void draw() { ...}
}
class Circle
{
virtual void draw() {...}
}
现在假设你有一个Shape的指针数组
Shape *p = new Shape[2]; //当然可能更大
p[0] = new Rectangle;
p[1] = new Circle;
如果你要画出两个图形,你不必:
((Rectangle *)p)[0]->draw();
((Circle *)p)[1]->draw();
只需
for (int i=0; i<2; i++)
p[i]->draw();
可以帮你自动调用正确的函数。
有时候,在运行期间,即使是程序员也不知道父类指针指向它的哪个子类。随着程序的运行,它一会指向这个,一会指租基向那个。所以,只有采用这陆升种方法来保证正确的函数调用了。
一:函数重载 主要是不同的参数
二:函数隐藏凯丛激 主要是子类函盯袜数隐藏父类同名同参函数
三:虚函郑乎数 如一楼所述