码迷,mamicode.com
首页 > 其他好文 > 详细

动态类型

时间:2015-06-12 19:10:54      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

动态类型与静态类型

静态类型

         是指不需要考虑表达式的执行期语义,仅分析程序文本而决定的表达式类型。静态类型仅依赖于包含表达式的程序文本的形式,而在程序运行时不会改变。通俗的讲,就是上下文无关,在编译时就可以确定其类型。

动态类型

        是指由一个左值表达式表示的左值所引用的最终派生对象的类型。例:如果一个静态类型为“类 B ”的指针p 指向一个继承于 B的类 D 的对象,则表达式 *p 的动态类型为“D”。引用按照相似规则处理。一般地讲,基类的指针和基类引用有可能为动态类型,就是说在运行之前不能够确定其真实类型。通常我们说,“基类指针指向的对象的实际/真正类型”或“基类引用所引用的对象的实际/真正类型”,就是它们的动态类型。很显然,这个动态类型是  C++ 语言通过指针和引用实现运行时多态能力的核心概念。

 

如果要静态类型与动态类型不同或者要能够进行动态绑定,都需要满足两个条件,缺一不可:

简单地说,虚函数是动态绑定的基础;动态绑定是实现运行时多态的基础。
要触发动态绑定,需满足两个条件:
(1)  只有虚函数才能进行动态绑定,非虚函数不进行动态绑定。
(2)  必须通过基类类型的引用或指针进行函数调用。
通过基类指针或基类引用做形参,当实参传入不同的派生类(或基类)的指针或引用,在函数内部触发动态绑定,从而来运行时实现多态的。
如果只是基类指针指向派生类,但是不存在虚函数,则基类的指针类型仍然与静态类型相同,是基类的指针(用typeid求动态类型)。
如果在基类中添加了虚函数,则如果基类指针指向了派生类,此时基类的指针为动态类型与所指向的派生类类型有关。

动态类型

标签:

原文地址:http://www.cnblogs.com/wuchanming/p/4572225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!