您的位置:首页 > 编程语言 > C语言/C++

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

2015-09-21 16:07 477 查看


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

小猪小猪903

答得太好了,怒赞^ω^回复

2012-6-12 18:45

幻梦·人生

回复 peterde5:你可以这么理解,就是加上virtual之后,使用父类的指针和引用,可以访问到子类的virtual方法。回复

2012-6-12 17:03

peterde5

也就是说,不加virtual,你的子类对象会有两个fun函数,一个父类的,一个子类的。 如果你加上virtual,你的子类只有一个fun函数,就是父类的fun函数。 这句话感觉不太对啊!应该是加上virtual就只有子类的fun函数吧!回复





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

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


其他类似问题

2014-05-23在c++中,虚函数可以允许在派生类中重新定义与基类的同名函数...

2008-01-05c++为何基类的析构函数要么定义为保护的公有成员函数,要么定...2

2008-07-10如果派生类中没有对基类的虚函数进行重定义,则它继承基类中的(...3

2007-10-02虚函数是在基类中定义,,还是在派生类中定义啊???3

2008-11-21c++中,
基类的成员函数调用本基类的一个虚函数时, 调用的...1

更多相关问题>>


为您推荐:

<iframe src="http://entry.baidu.com/rp/home?di=u2115503&rsi0=450&rsi1=25&type=pageembed&version=1&titff=sans-serif%2Ctahoma%2C%22MicrosoftYaHei%22&titfs=14&rss2=%232d64b3&rss3=%232d64b3&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&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&ref=http%3A%2F%2Fzhidao.baidu.com%2Flink%3Furl%3D3T2dWQuh4Fs8KG1DBPmzmepOcIZDoHKuY21zf-RBHUPFQJwYp2CKBanhDhTxYhNKSkUE3M3Qa-0lKjezsIgZ_a&pageWidth=1808&pageHeight=846&t=1442822274236&iframeWidth=1808&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

虚函数的相关知识

2011-10-15虚函数的定义 3
2006-11-14虚函数 纯虚函数是一个东西吗? 179
2008-05-01在c++中虚函数和多态性是什么意思 172
2007-08-06C++中虚函数的作用是什么?它应该怎么用呢? 1717
2010-05-21C++中的虚函数和重定义有什么区别 8
更多关于虚函数的问题>>

网友都在找:

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

等待您来回答

0回答How to buy neverwinter astral diamonds xbox with 10% dis...
0回答苹果6前置摄像头垫片移位是后封机吗
0回答 30 android系统开发中的资源怎么理解
0回答Android百度地图api可以把背景设置为灰白灰白的吗
0回答TANK007手电筒RC11三个灯珠是不是一样的型号的呢?
0回答Win10系统中svn不显示小图标怎么办
0回答How strong is China’s economy?中国的经济有多坚韧
2回答苹果6摄像头有灰,售后给换吗
0回答Android 开发如何实现自己的ACtivity ?
0回答 30 穷游android端的app中地图API用的是哪家的?
0回答数字式振动控制系统rc-2000多少钱
0回答Mac OS X 系统下面的HBuilder,我安装了HB自带的插件svn,但...
0回答如何反驳 How to Disagree
1回答三星9158大摄像头和三星p709大摄像头有区别吗 
0回答android studio无法自动下载更新包
更多等待您来回答的问题>>

gabbyzang | 一级签到

知道日报

2015.09.21往期回顾

动物也会学习和创造?<iframe id="cproIframe_968278_3" width="260" height="260" src="http://cb.baidu.com/ecom?adn=18&at=128&aurl=&cad=1&ccd=24&cec=GBK&cfv=17&ch=0&col=en-US&conBW=1&conOP=1&cpa=1&dai=3&dis=0&hn=9&layout_filter=tabcloud%2Cimage&ltr=http%3A%2F%2Fzhidao.baidu.com%2Flink%3Furl%3D3T2dWQuh4Fs8KG1DBPmzmepOcIZDoHKuY21zf-RBHUPFQJwYp2CKBanhDhTxYhNKSkUE3M3Qa-0lKjezsIgZ_a&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&lu_161=0&lunum=6&n=44039180_cpr&pcs=1808x846&pis=10000x10000&ps=551x1139&psr=1920x1080&pss=1808x2767&qn=3a607d261aa91588&rad=&rs=301&rsi0=260&rsi1=260&rsi5=4&rss0=%23999999&rss1=%23FFFFFF&rss2=%230000ff&rss3=&rss4=&rss5=&rss6=%23e10900&rss7=&scale=&skin=&td_id=9223372032564537925&titFF=%E5%AE%8B%E4%BD%93&titFS=14&titTA=left&tn=baiduTlinkInlay&tpr=1442822273382&ts=1&version=2.0&wn=2&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=968278&ti=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&tt=1442822273357.800.887.888" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true"></iframe>









精彩知识在知道
关注百度知道微博,互动拿好礼!
真相问答机,我们一起粉碎流言!
免费领取《知道日报》主题专刊
知道大数据,用数据解读生活点滴

<iframe id="cproIframe_639890_2" width="960" height="90" src="http://cb.baidu.com/ecom?adn=4&at=6&aurl=&cad=1&ccd=24&cec=GBK&cfv=17&ch=0&col=en-US&conOP=0&cpa=1&dai=2&dis=0&ltr=http%3A%2F%2Fzhidao.baidu.com%2Flink%3Furl%3D3T2dWQuh4Fs8KG1DBPmzmepOcIZDoHKuY21zf-RBHUPFQJwYp2CKBanhDhTxYhNKSkUE3M3Qa-0lKjezsIgZ_a&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&lunum=6&n=91010099_4_cpr&pcs=1808x846&pis=10000x10000&ps=145x424&psr=1920x1080&pss=1808x2481&qn=45451f62a03916f7&rad=&rs=301&rsi0=960&rsi1=90&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000FF&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=&td_id=9223372032564306677&tn=text_default_960_90&tpr=1442822273382&ts=1&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=639890&ti=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&tt=1442822273357.151.302.323" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true"></iframe>



新手帮助
如何答题
获取采纳
使用财富值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: