2012-06-12 15:08风雅风度 | 浏览 1387 次
派生类定义的成员函数名可能和基类的成员函数名重复,如果原型完全相同,则派生类会有两个远行一模一样的函数,此时,派生类的函数会覆盖基类的函数。2012-06-12 15:42提问者采纳
而虚函数貌似只是在基类中多添加了一个virtual,并没有什么区别啊!求解答~
这涉及到多态的问题。评论(3) 43 12012-12-22 11:30
比如说你有一个基类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函数执行。
非常方便。
打字很辛苦啊。希望能采纳。有问题可以继续追问,我在线回答。



其他1条回答
2012-06-12 15:27热心网友如果加关键字 virtual,则是 override;如果不加关键字 virtual,则跟作用域有关,基类与派生类的成员函数作用域不相同。评论 0 0
虚函数的相关知识
- 2011-10-15虚函数的定义 3
- 2006-11-14虚函数 纯虚函数是一个东西吗? 179
- 2008-05-01在c++中虚函数和多态性是什么意思 172
- 2007-08-06C++中虚函数的作用是什么?它应该怎么用呢? 1717
- 2010-05-21C++中的虚函数和重定义有什么区别 8