c++静态多态和动态多态(笔记).docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c++静态多态和动态多态(笔记).doc

? 查看文章 ? c++的静态多态和动态多态(笔记) 2010-01-03 21:16 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”。和纯粹的面向对象程序设计语言不同,C++中的多态有着更广泛的含义。除了常见的通过类继承和虚函数机制生效于运行期的动态多态(dynamic polymorphism)外,模板也允许将不同的特殊行为和单个泛化记号相关联,由于这种关联处理于编译期而非运行期,因此被称为静态多态(static polymorphism)。 事实上,带变量的宏和函数重载机制也允许将不同的特殊行为和单个泛化记号相关联。然而,习惯上我们并不将它们展现出来的行为称为多态(或静态多态)。今天,当我们谈及多态时,如果没有明确所指,默认就是动态多态,而静态多态则是指基于模板的多态。不过,在这篇以C++各种多态技术为主题的文章中,我们首先还是回顾一下C++社群争论已久的另一种“多态”:函数多态(function polymorphism),以及更不常提的“宏多态(macro polymorphism)”。 C++支持多种风格的编程模式 称之为编程范型 C++支持的编程范型包括面向过程的 基于对象的 面向对象的和泛型编程通过指针和引用来支持多态 是面向对象的编程范型区 别于基于对象的编程范型的本质所在 所谓多态 是指通过 单一的标识支持不同的特定行为的能力 C++支持多种形式 的多态 从绑定时间来看 可以分成静态多态和动态多态 也称为编译期多态和运行期多态 从表现的形式来看 有虚 函数 模板 重载和转换[1] 由于静态多态在时间和空间上都比动态多态表现得好 因此在其他的条件相同的情况下 应该更多地使用静态多态 函数多态 也就是我们常说的函数重载(function overloading)。基于不同的参数列表,同一个函数名字可以指向不同的函数定义: // overload_poly.cpp #include iostream #include string // 定义两个重载函数 int my_add(int a, int b) { ??? return a + b; } int my_add(int a, std::string b) { ??? return a + atoi(b.c_str()); } int main() { ??? int i = my_add(1, 2);??????????????? // 两个整数相加 ??? int s = my_add(1, 2);????????????? // 一个整数和一个字符串相加 ??? std::cout i = i \n; ??? std::cout s = s \n; } 根据参数列表的不同(类型、个数或兼而有之),my_add(1, 2)和my_add(1, 2)被分别编译为对my_add(int, int)和my_add(int, std::string)的调用。实现原理在于编译器根据不同的参数列表对同名函数进行名字重整,而后这些同名函数就变成了彼此不同的函数。比方说,也许某个编译器会将my_add()函数名字分别重整为my_add_int_int()和my_add_int_str()。 宏多态 带变量的宏可以实现一种初级形式的静态多态: // macro_poly.cpp #include iostream #include string // 定义泛化记号:宏ADD #define ADD(A, B) (A) + (B); int main() { ??? int i1(1), i2(2); ??? std::string s1(Hello, ), s2(world!); ??? int i = ADD(i1, i2);??????????????????????? // 两个整数相加 ??? std::string s = ADD(s1, s2);??????????????? // 两个字符串“相加” ??? std::cout i = i \n; ??? std::cout s = s \n; } 当程序被编译时,表达式ADD(i1, i2)和ADD(s1, s2)分别被替换为两个整数相加和两个字符串相加的具体表达式。整数相加体现为求和,而字符串相加则体现为连接。程序的输出结果符合直觉: 1 + 2 = 3 Hello, + world! = Hello, world! 动态多态 这就是众所周知的的多态。现代面向对象语言对这个

文档评论(0)

lingyun51 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档