!!!!!!!!!!!!!!!!C++:派生类中重定义基类的成员函数与虚函数区别在哪里?

时间:2022-09-07 21:38:53

C++:派生类中重定义基类的成员函数与虚函数区别在哪里?!!!!!!!!!!!!!!!!C++:派生类中重定义基类的成员函数与虚函数区别在哪里?

2012-06-12 15:08风雅风度 | 浏览 1387 次 编程语言C语言函数
派生类定义的成员函数名可能和基类的成员函数名重复,如果原型完全相同,则派生类会有两个远行一模一样的函数,此时,派生类的函数会覆盖基类的函数。
而虚函数貌似只是在基类中多添加了一个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!!!!!!!!!!!!!!!!C++:派生类中重定义基类的成员函数与虚函数区别在哪里?小猪小猪903答得太好了,怒赞^ω^回复2012-6-12 18:45!!!!!!!!!!!!!!!!C++:派生类中重定义基类的成员函数与虚函数区别在哪里?幻梦·人生回复 peterde5:你可以这么理解,就是加上virtual之后,使用父类的指针和引用,可以访问到子类的virtual方法。回复2012-6-12 17:03!!!!!!!!!!!!!!!!C++:派生类中重定义基类的成员函数与虚函数区别在哪里?peterde5也就是说,不加virtual,你的子类对象会有两个fun函数,一个父类的,一个子类的。 如果你加上virtual,你的子类只有一个fun函数,就是父类的fun函数。 这句话感觉不太对啊!应该是加上virtual就只有子类的fun函数吧!回复

!!!!!!!!!!!!!!!!C++:派生类中重定义基类的成员函数与虚函数区别在哪里?

幻梦·人生 | 来自团队:我本军团 | 十五级 采纳率88%

擅长: C/C++ 操作系统/系统故障 常见软件 娱乐休闲

其他类似问题

更多相关问题>>

为您推荐:

<iframe src="http://entry.baidu.com/rp/home?di=u2115503&amp;rsi0=450&amp;rsi1=25&amp;type=pageembed&amp;version=1&amp;titff=sans-serif%2Ctahoma%2C%22MicrosoftYaHei%22&amp;titfs=14&amp;rss2=%232d64b3&amp;rss3=%232d64b3&amp;title=C%2B%2B%EF%BC%9A%E6%B4%BE%E7%94%9F%E7%B1%BB%E4%B8%AD%E9%87%8D%E5%AE%9A%E4%B9%89%E5%9F%BA%E7%B1%BB%E7%9A%84%E6%88%90%E5%91%98%E5%87%BD%E6%95%B0%E4%B8%8E%E8%99%9A%E5%87%BD%E6%95%B0%E5%8C%BA%E5%88%AB%E5%9C%A8%E5%93%AA%E9%87%8C%EF%BC%9F_%E7%99%BE%E5%BA%A6%E7%9F%A5%E9%81%93&amp;ltu=http%3A%2F%2Fzhidao.baidu.com%2Fquestion%2F436687352.html%3Fqbl%3Drelate_question_0%26word%3D%25CE%25AA%25CA%25B2%25C3%25B4%25D3%25D0%25D0%25A9%25BA%25AF%25CA%25FD%25B6%25A8%25D2%25E5%25B3%25C9%25D0%25E9%25BA%25AF%25CA%25FD&amp;ref=http%3A%2F%2Fzhidao.baidu.com%2Flink%3Furl%3D3T2dWQuh4Fs8KG1DBPmzmepOcIZDoHKuY21zf-RBHUPFQJwYp2CKBanhDhTxYhNKSkUE3M3Qa-0lKjezsIgZ_a&amp;pageWidth=1808&amp;pageHeight=846&amp;t=1442822274236&amp;iframeWidth=1808&amp;iframeHeight=846" align="center,center" marginwidth="0" marginheight="0" class="BAIDU_SS_HHIFRAME" scrolling="no" frameborder="0" allowtransparency="true" style="width: 450px; height: 25px; background-color: transparent;"></iframe>
按默认排序 | 按时间排序

其他1条回答

2012-06-12 15:27热心网友如果加关键字 virtual,则是 override;
如果不加关键字 virtual,则跟作用域有关,基类与派生类的成员函数作用域不相同。
评论 | 0 0

虚函数的相关知识

更多关于虚函数的问题>>

网友都在找:

虚函数 完全一样 c 函数重定义 虚函数和实函数 私有派生】

等待您来回答

更多等待您来回答的问题>>