免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4729 | 回复: 0
打印 上一主题 下一主题

[函数] 请问下边段代码,为什么都会调用CDocument::Serialize()函数,谢谢! [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-05-04 07:48 |显示全部楼层
首先要知道虚函数在运行时才绑定具体的函数,而非虚函数则是在编译阶段就确定了具体调用哪个函数,前者叫晚绑定,后者叫早绑定
其次要理解继承-子类继承父类的所有特性
#1 testing
CDocument::func()
CDocument::Serialize()
mydoc.fun()->CDocument::func()->CDocument::Serialize()
注意编译时mydoc.fun()已经放的是CDocument::func()的逻辑地址,而CDocument::func()内部对Serialize()只会在继承层次中向上找,因为他自己实现了Serialize(),所以编译的时候确定的是CDocument::Serialize(),为什么不插入子类的CMyDoc::Serialize(),因为父类无法感知子类的存在-编译父类的时候子类可能还不存在,呵呵
#2 testing
CDocument::func()
CDocument::Serialize()
正是所谓的向上类型转换,不会出现问题,现在mydoc已经指向CMyDoc mydoc这个大对象中的CDocument
小对象,这里可以参考有些书上介绍的对象布局的部分,另外这里虽然用指针,但不会出现动态绑定的情况,因为serialize不是virtual的
#3 testing
CDocument::func()
CDocument::Serialize()
同test 1的解释,只不过把原来的对象改成了该类型对象的指针而已,注意指针的类型依然是CMyDoc
#4 testing
CDocument::func()
CDocument::Serialize()
同test 2
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP