静态类型&动态类型

何时使用:使用存在继承关系的类型时,必须将一个变量或其他表达式的静态类型与该表达式表示对象的动态类型区分开来

静态类型:表达式的静态类型在编译时总是已知的,它是变量声明时的类型或表达式生成的类型

动态类型:动态类型直到运行时才可知,(变量或)表达式表示的内存中的对象的类型

如果表达式既不是引用也不是指针,则它的动态类型永远与静态类型一致。

如当print_total调用net_price时:double ret = item.net_price(n);,我们知道item的静态类型是Quote&,它的动态类型则依赖于item绑定的实参(即动态类型知道运行时调用print_total才知道),若我们传递一个Bulk_quote对象给print_total,则item的静态类型将与它的动态类型不一致(此时item的静态类型是Quote&,而相应的动态类型是Bulk_quote)

时间: 2024-10-11 16:19:57

静态类型&动态类型的相关文章

c++知识点总结--静态与动态类型

对象的静态类型(static type),就是它在程序中被声明时所采用的类型 对象的动态类型(dynamic type)是指“目前所指对象的类型” vitual 函数是动态绑定而来,调用一个virtual函数时,究竟调用哪一个函数实现,取决于发出调用的那个对象的动态类型 class Shape{ public: enum ShapeColor{ Red, Green, Blue = 1, Org }; void printColor(){ cout << Red << Green

静态与动态类型

静态类型语言中,变量具有类型,而且在编译期确定,具有某一类型的变量只能持有相同类型的数据.动态类型语言中,变量没有类型,只有数据有类型,变量可以持有任意类型的数据.例如,C是静态类型语言,一个int型变量只能作为int来处理.Python是动态语言,变量可以持有整数.字符串.列表.闭包等任何数据. Java通常被认为是静态语言,然而准确来说并非如此.Java的变量有类型,但是变量可以持有子类型的数据,例如Animal变量可以持有Cat或者Dog,具体是什么类型,是由运行时的数据决定的.这显然是动

弱类型、强类型、动态类型、静态类型语言的区别是什么?

作者:amalgamation链接:https://www.zhihu.com/question/19918532/answer/21647195来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继续执行,但可能出现任意行为.如C里的缓冲区溢出.Jump到错误地址 Forbidden Beh

动态类型

作者:rainoftime链接:http://www.zhihu.com/question/19918532/answer/21647195来源:知乎著作权归作者所有,转载请联系作者获得授权. 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对“严格”的说法. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继续执行,但可

Objective-C多态:动态类型识别+动态绑定+动态加载

一.Objective-C多态 1.概念:相同接口,不同的实现 来自不同类可以定义共享相同名称的方法. 动态类型能使程序直到执行时才确定对象所属类型 动态类型绑定能使程序直到执行时才确定要对对象调用的实际方法 2.Objective-C不同于传统程序设计语言,它可以再运行时加入新的数据类型和新的程序模块:动态类型识别,动态绑定,动态加载 3.id类型:通用指针类型,弱类型,编译时不进行类型检查 二.动态类型识别 1.任意NSObject的子类都会继承NSObject的isa实例变量,而且当NSO

强类型、弱类型、动态类型、静态类型语言

收集了一些关于编程语言分类的文章: 一. 作者:rainoftime链接:https://www.zhihu.com/question/19918532/answer/21647195来源:知乎 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对"严格"的说法. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继

动态类型和动态绑定,动态载入

1.       iOS动态类型和动态绑定简述 NSObject * 也就是id类型---动态类型 动态绑定: 先明白引用多态---父类指针可以指向子类对象 方法多态: 方法名相同,方法的实现却不同 动态绑定就是当程序运行的时候,才去查找对象的类型. 一种是静态载入,一种动态载入 2.      简述你对UIView.UIWindow和CALayer的理解 UIWindow 就是程序的窗口,一个程序可以有多个窗口,但是屏幕大小限定的在同一时间内,只能显示一个窗口,窗口上面显示的UIView,可以

python笔记2 python对象的动态类型

Python中的一切都是对象,并且这些对象都是Python的组成部分,即是内置对象,和python一同产生. 从更正式的角度来讲,在P ython中,数据以对象的形式出现一一无论是Py t hon提供的内置对象,还是使用Python或是像C扩展库这 样的扩展语言工具创建的对象.尽管在以后才能确定这一概念,但对象无非是内存中的一部分,包含数值和相关操作的集合. 内置对象 对象类型 例子常量/创建 数字 1234, 3.1415, 3+4j, Decimal. Fraction 字符串 'spam'

静态、动态、强和弱类型

对于动态语言与静态语言的区分,套用一句流行的话就是:Static typing when possible, dynamic typing when needed. “动”或“静”,强调的是实施类型的时间,编译里就要确定类型的是静态类型,比如C/C++/JAVA/C#,运行时才实施类型的则是动态类型,比如VB/Python.          而“强”或“弱”刚强调实施类型的强度,强类型的语言,如C++等,变量的类型不可随意转换:而弱类型的语言,变量的类型可以随需要任意转换,而且通常都是隐式的.