派生类定义的成员函数名可能和基类的成员函数名重复,如果原型完全相同,则派生类会有两个远行一模一样的函数,此时,派生类的函数会覆盖基类的函数。 而虚函数貌似只是在基类中多添加了一个virtual,并没有什么区别啊!求解答~
2012-06-12 15:42
提问者采纳
这涉及到多态的问题。 比如说你有一个基类BASE,有一个派生类Derived继承自BASE 两个类都有一个叫做fun的方法 然后你创建一个子类对象,但是用父类的指针(或者引用)指向他 例如: BASE *b = new Derived(); 如果你不加virtual 那么b.fun()调用的是父类的fun。因为b是父类指针,只能调用父类的方法,调用不到子类的方法。 如果你加上virtual 那么b.fun()调用的是子类的fun。因为加了virtual之后,会产生一个虚表,将fun函数放入虚表之内。当创建一个子类对象时,会自动“覆盖”父类的fun函数(你暂时这么理解就行)。b.fun()调用的是子类覆盖之后的fun函数。 也就是说,不加virtual,你的子类对象会有两个fun函数,一个父类的,一个子类的。 如果你加上virtual,你的子类只有一个fun函数,就是父类的fun函数。 简单说一下多态的作用吧。 比如说ATM,你要插借记卡,信用卡,VISA之类的,各种各样的银行卡。这些卡都是银行卡,所以银行卡是父类。而各种各样的卡是子类。 当ATM要取钱的时候,他不需要为每一种卡都写一个函数 借记卡.getMoney(),信用卡.getMoney()。 有了多态之后,他只需要写一个 银行卡的getMoney()函数就行了,将这个函数设置为virtual。多态的意义就是能够用父类指针来指向子类对象。而不同种类的卡(子类)只需要实现自己的getMoney().当使用银行卡调用getMoney函数时,程序会因为多态性,自动寻找子类的getMoney函数执行。 非常方便。 打字很辛苦啊。希望能采纳。有问题可以继续追问,我在线回答。
评论(3)
43
1
2012-12-22 11:30
小猪小猪903
![](https://i-blog.csdnimg.cn/blog_migrate/1066e5136aa0d5b7d33a0c967be9ec25.jpeg)
2012-6-12 18:45
幻梦·人生
![](https://i-blog.csdnimg.cn/blog_migrate/046d47260c5c73e3720a6e2ab68a1253.jpeg)
2012-6-12 17:03
peterde5
![](https://i-blog.csdnimg.cn/blog_migrate/cd33287fb44ef951828570fbb0671a39.jpeg)
虚函数的相关知识
- 2011-10-15虚函数的定义 3
- 2006-11-14虚函数 纯虚函数是一个东西吗? 179
- 2008-05-01在c++中虚函数和多态性是什么意思 172
- 2007-08-06C++中虚函数的作用是什么?它应该怎么用呢? 1717
- 2010-05-21C++中的虚函数和重定义有什么区别 8
等待您来回答
![](https://i-blog.csdnimg.cn/blog_migrate/b90d242adb2694d0765e061e7331e701.gif)