笨鸟先飞学编程系列-浅析C++的继承与多态性.docVIP

笨鸟先飞学编程系列-浅析C++的继承与多态性.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
笨鸟先飞学编程系列之八 浅析C++的继承与多态性 当我们进一步研究类与对象的时候,难免的就要考虑到类本身的一些特点以及类与其它类之间的关系。在本专题开始之前,我们已经接触到像一个类对象作为另一个类成员的嵌套关系了。本专题,我们就专心的研究一下类与类之间的继承关系和其类本身的特点。 我们知道,类与对象的概念是来自于对现实事物的模拟,就像孩子用于其父母的一些特征,不论是木桌还是石桌都有桌子的特点。同样,类与类之间自然的也应该拥有这些特点的。而拥有这些特点就使得我们代码更加结构化,条理化,最大的好处则是:简化我们的代码,提高代码的重用性。 好,不多废话,先让我们看看,这个专题大概要讲些什么: 体验类的静态多态性之重载 构建类与类之间的父子关系及其访问限制 体验类的动态多态性之虚函数 浅析类的多继承 学习小结 从这个目录可以看出这个专题内容非常的关键而且非常的庞杂。本来我是想将它们分成两个专题,分别讲述的。可是鉴于它们之间好多的知识点相互参杂,没有办法很好的分离,为了不给各位读者遗留困惑,我决定将他们合到一起,希望各位能慢慢体会其中的奥秘,从根本上掌握它们。 好废话不多说,我们进入正题。 体验类的静态多态性之重载 重载,当时我理解了半天没弄明白是什么意思,现在才知道,就是用模样相同的东西实现不同的功能,下面我们分别看一下它们的用法。 函数重载与缺省参数 A、函数重载的实现原理 假设,我们现在想要写一个函数(如Exp01),它即可以计算整型数据又可以计算浮点数,那样我们就得写两个求和函数,对于更复杂的情况,我们可能需要写更多的函数,但是这个函数名该怎么起呢?它们本身实现的功能都差不多,只是针对不同的参数: int sum_int(int nNum1, int nNum2) { return nNum1 + nNum2; } double sum_float(float nNum1, float nNum2) { return nNum1 + nNum2; } C++中为了简化,就引入了函数重载的概念,大致要求如下: 重载的函数必须有相同的函数名 重载的函数不可以拥有相同的参数 这样,我们的函数就可以写成: int sum (int nNum1, int nNum2) { return nNum1 + nNum2; } double sum (float nNum1, float nNum2) { return nNum1 + nNum2; } 到现在,我们可以考虑一下,它们既然拥有相同的函数名,那他们怎么区分各个函数的呢?相信聪明的你一定根据上面的要求推测出来了,是的,名称粉碎。很简单,我们来验证一下我的说法,继续打开Exp01工程,点击菜单栏的”project”(”settings”: 勾选“Generate mapfile”选项,然后重新编译程序,到Debug目录下找到Exp01.map文件,用记事本打开它: Address Publics by Value Rva+Base Lib:Obj 0001?sum_int@@YAHHH@Zf Exp01.obj 0001?sum_float@@YAMMM@Zf Exp01.obj 0001:000000b0 ?TestCFun@@YAXXZ 004010b0 f Exp01.obj 0001?sum@@YAHHH@Zf Exp01.obj 0001?sum@@YAMMM@Zf Exp01.obj 0001?TestCplusFun@@YAXXZf Exp01.obj 0001_mainf Exp01.obj 哈哈,将参数信息与函数名粉碎了并整合成了一个新的函数名,今后,我们在编写C++程序的时候,调试、排错都难免与这些粉碎后的函数名打交道,好多的朋友为了解决这个问题想出了各种方法,记得在看雪坛子上有一篇名叫《史上最牛资料助你解惑c++调试》的文章,大致上把粉碎后的函数名各部分的含义都解释出来了,其实没有这个必要的,我们用的VC开发环境中已经提供了一个工具(UNDNAME.EXE),它可以解析这些粉碎后的函数,当然如果我们逆向分析它,很容易就可以知道,其实就是调用一个API函数: UnDecorateSymbolName(m_szFuncName, m_szResultInfo.GetBuffer(0), MAX_PATH,\ UNDNAME_32_BIT_DECODE|UNDNAME_NO_R

文档评论(0)

天马行空 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档