第1个回答 2014-04-13
虚函数能够帮助实现多态。例如:
一些图形类Point Line Circle,他们派生自基类Graphic,基类有虚函数Print用于在屏幕上输出,由于每个类的输出方式是不一样的,所以每个类都对Print函数进行了各自的定义。
现在一个画图软件,程序中需要有个容器(如数组)存储各种图形,这个容器中有Point Line 等的各种对象。现在需要遍历这个容器把图形全部输出到屏幕上,由于Graphic实现了虚函数Print,就可以定义一个Graphic指针,依次指向每个对象并调用Print函数,每个对象就能自动按照自己的类型正确Print。若没有虚函数功能,Graphic指针就必须依次判断这个对象是什么类型,再手动调用相应的Print函数,代码会变得很长
第2个回答 2014-04-13
其实虚函数是实现c++语言多态的方式,当你有多个类时,你就可以定义虚函数通过基类指针来指定你要调用的那个类的这个同名函数,你如果直接用调用对象的函数也可以,那你每次都要声明一个该类的对象,所占空间比较大
第3个回答 2014-04-13
虚函数实现了多态,当你的父类和子类中都有一个相同名称但是内部实现不一样的函数时,怎样知道哪个函数被调用了呢(父类的成员还是子类的成员)?
如这样一个函数
printfunc(parent * p)
{
p->print();
}
如果我传的是子类的指针那他也会调用父类的成员而不是子类的(这是由编译器的特性决定的C++是静态编译型语言),但是如果我把父类和子类中的同名(应该说名字参数都一样)成员定义为虚函数,那么我传给printfunc谁的指针它就会调用谁的成员。