




已阅读5页,还剩161页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章类型检查,本章内容静态检查中最典型的部分类型检查:类型系统、类型检查、多态函数、重载忽略其它的静态检查:控制流检查、唯一性检查、关联名字检查,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言介绍一些和程序运行有联系的概念,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror),5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror)例:非法指令错误,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror)例:非法指令错误、非法内存访问,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror)例:非法指令错误、非法内存访问、除数为零,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror)例:非法指令错误、非法内存访问、除数为零引起计算立即停止,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror)例:非法指令错误、非法内存访问、除数为零引起计算立即停止不会被捕获的错误(untrappederror),5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror)例:非法指令错误、非法内存访问、除数为零引起计算立即停止不会被捕获的错误(untrappederror)例:下标变量的访问越过了数组的末端,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror)例:非法指令错误、非法内存访问、除数为零引起计算立即停止不会被捕获的错误(untrappederror)例:下标变量的访问越过了数组的末端例:跳到一个错误的地址,该地址开始的内存正好代表一个指令序列,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言程序运行时的执行错误分成两类会被捕获的错误(trappederror)例:非法指令错误、非法内存访问、除数为零引起计算立即停止不会被捕获的错误(untrappederror)例:下标变量的访问越过了数组的末端例:跳到一个错误的地址,该地址开始的内存正好代表一个指令序列错误可能会有一段时间未引起注意,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言良行为的程序不同场合对良行为的定义略有区别例如,没有任何不会被捕获错误的程序,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言良行为的程序不同场合对良行为的定义略有区别例如,没有任何不会被捕获错误的程序安全语言任何合法程序都是良行为的,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言良行为的程序不同场合对良行为的定义略有区别例如,没有任何不会被捕获错误的程序安全语言任何合法程序都是良行为的通常是设计一个类型系统,通过静态的类型检查来拒绝不会被捕获错误,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言良行为的程序不同场合对良行为的定义略有区别例如,没有任何不会被捕获错误的程序安全语言任何合法程序都是良行为的通常是设计一个类型系统,通过静态的类型检查来拒绝不会被捕获错误但是,设计一个类型系统,它正好只拒绝不会被捕获错误是非常困难的,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言禁止错误(forbiddenerror)不会被捕获错误集合+会被捕获错误的一个子集,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言禁止错误(forbiddenerror)不会被捕获错误集合+会被捕获错误的一个子集为语言设计类型系统的目标是在排除禁止错误,5.1类型在编程语言中的作用,5.1.1执行错误和安全语言禁止错误(forbiddenerror)不会被捕获错误集合+会被捕获错误的一个子集为语言设计类型系统的目标是在排除禁止错误良行为程序和安全语言也可基于禁止错误来定义,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型化的语言变量的类型变量在程序执行期间的取值范围,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型化的语言变量的类型类型化的语言变量都被给定类型的语言并且表达式、语句等语法构造的类型都是可以静态确定的例如,类型boolean的变量x在程序每次运行时的值只能是布尔值,not(x)总有意义,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型化的语言变量的类型类型化的语言未类型化的语言不限制变量值范围的语言:一个运算可以作用到任意的运算对象,其结果可能是一个有意义的值、一个错误、一个异常或一个语言未加定义的结果例如:lisp语言,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型化的语言变量的类型类型化的语言未类型化的语言显式类型化语言类型是语法的一部分,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型化的语言变量的类型类型化的语言未类型化的语言显式类型化语言隐式类型化的语言不存在隐式类型化的主流语言,但可能存在忽略类型信息的程序片段,例如不需要程序员声明函数的参数类型,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型系统语言的组成部分,由一组定型规则(typingrule)构成,这组规则用来给各种语言构造指派类型,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型系统语言的组成部分,由一组定型规则(typingrule)构成,这组规则用来给各种语言构造指派类型设计类型系统的根本目的是用静态检查的方式来保证合法程序运行时的良行为,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型系统语言的组成部分,由一组定型规则(typingrule)构成,这组规则用来给各种语言构造指派类型设计类型系统的根本目的是用静态检查的方式来保证合法程序运行时的良行为类型系统的形式化类型表达式、定型断言、定型规则,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统类型系统语言的组成部分,由一组定型规则(typingrule)构成,这组规则用来给各种语言构造指派类型设计类型系统的根本目的是用静态检查的方式来保证合法程序运行时的良行为类型系统的形式化类型表达式、定型断言、定型规则类型检查算法通常是静态地完成类型检查,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统良类型的程序没有类型错误的程序,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统良类型的程序没有类型错误的程序合法程序良类型程序(若语言定义中无其它方式表示的约束),5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统良类型的程序没有类型错误的程序合法程序良类型程序(若语言定义中无其它方式表示的约束)类型可靠(typesound)的语言所有良类型程序(合法程序)都是良行为的类型可靠的语言一定是安全的语言,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统语法的和静态的概念动态的概念类型化语言安全语言良类型程序良行为的程序,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统未类型化语言可以通过彻底的运行时详细检查来排除所有的禁止错误如lisp语言,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统未类型化语言可以通过彻底的运行时详细检查来排除所有的禁止错误如lisp语言类型化语言类型检查也可以放在运行时完成,但影响效率一般都是静态检查,类型系统被用来支持静态检查静态检查语言通常也需要一些运行时的检查数组访问越界检查,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统实际使用的一些语言并不安全禁止错误集合没有囊括所有不会被捕获的错误pascal语言无标志的变体记录类型函数型参数,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统实际使用的一些语言并不安全禁止错误集合没有囊括所有不会被捕获的错误pascal语言用c语言的共用体(union)来举例unionuintu1;intu2;u;intp;u.u1=10;p=u.u2;p=0;,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统实际使用的一些语言并不安全c语言还有很多不安全的并且被广泛使用的特征,如:指针算术运算、类型强制、参数个数可变,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统实际使用的一些语言并不安全c语言还有很多不安全的并且被广泛使用的特征,如:指针算术运算、类型强制、参数个数可变在语言设计的历史上,安全性考虑不足是因为强调代码的执行效率,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统实际使用的一些语言并不安全c语言还有很多不安全的并且被广泛使用的特征,如:指针算术运算、类型强制、参数个数可变在语言设计的历史上,安全性考虑不足是因为强调代码的执行效率在现代语言设计上,安全性的位置越来越重要,5.1类型在编程语言中的作用,5.1.2类型化语言和类型系统实际使用的一些语言并不安全c语言还有很多不安全的并且被广泛使用的特征,如:指针算术运算、类型强制、参数个数可变在语言设计的历史上,安全性考虑不足是因为强调代码的执行效率在现代语言设计上,安全性的位置越来越重要c的一些问题已经在c+中得以缓和更多一些问题在java中已得到解决,5.1类型在编程语言中的作用,5.1.3类型化语言的优点从工程的观点看,类型化语言有下面一些优点开发的实惠较早发现错误类型信息还具有文档作用,5.1类型在编程语言中的作用,5.1.3类型化语言的优点从工程的观点看,类型化语言有下面一些优点开发的实惠较早发现错误类型信息还具有文档作用编译的实惠程序模块可以相互独立地编译,5.1类型在编程语言中的作用,5.1.3类型化语言的优点从工程的观点看,类型化语言有下面一些优点开发的实惠较早发现错误类型信息还具有文档作用编译的实惠程序模块可以相互独立地编译运行的实惠可得到更有效的空间安排和访问方式,5.2描述类型系统的语言,类型系统主要用来说明编程语言的定型规则,它独立于类型检查算法,5.2描述类型系统的语言,类型系统主要用来说明编程语言的定型规则,它独立于类型检查算法定义一个类型系统,一种重要的设计目标是存在有效的类型检查算法,5.2描述类型系统的语言,类型系统主要用来说明编程语言的定型规则,它独立于类型检查算法定义一个类型系统,一种重要的设计目标是存在有效的类型检查算法类型系统的基本概念可用于各类语言,包括函数式语言、命令式语言和并行语言等,5.2描述类型系统的语言,类型系统主要用来说明编程语言的定型规则,它独立于类型检查算法定义一个类型系统,一种重要的设计目标是存在有效的类型检查算法类型系统的基本概念可用于各类语言,包括函数式语言、命令式语言和并行语言等本节讨论用形式方法来描述类型系统,5.2描述类型系统的语言,类型系统主要用来说明编程语言的定型规则,它独立于类型检查算法定义一个类型系统,一种重要的设计目标是存在有效的类型检查算法类型系统的基本概念可用于各类语言,包括函数式语言、命令式语言和并行语言等本节讨论用形式方法来描述类型系统然后讨论实例语言时:先定义语法,再给出类型系统的形式描述,最后写出类型检查的翻译方案,5.2描述类型系统的语言,类型系统的形式化类型系统是一种逻辑系统有关自然数的逻辑系统-自然数表达式(需要定义它的语法)a+b,3-良形公式(逻辑断言,需要定义它的语法)a+b=3,(d=3)(c10)-推理规则,5.2描述类型系统的语言,类型系统的形式化类型系统是一种逻辑系统有关自然数的逻辑系统类型系统-自然数表达式类型表达式a+b,3intint-良形公式a+b=3,(d=3)(c10)-推理规则,5.2描述类型系统的语言,类型系统的形式化类型系统是一种逻辑系统有关自然数的逻辑系统类型系统-自然数表达式类型表达式a+b,3intint-良形公式定型断言a+b=3,(d=3)(c10)x:int|x+3:int-推理规则(x:int叫做定型环境),5.2描述类型系统的语言,类型系统的形式化类型系统是一种逻辑系统有关自然数的逻辑系统类型系统-自然数表达式类型表达式a+b,3intint-良形公式定型断言a+b=3,(d=3)(c0)(typefunction)(t1,t2void)定型断言中的类型表达式也可以用抽象语法,5.3简单类型检查器的说明,定型规则表达式(exptruth)(expnum)(expid),5.3简单类型检查器的说明,定型规则表达式(expmod)(expindex)(0e2n1)(expderef),5.3简单类型检查器的说明,定型规则表达式(expfuncall),5.3简单类型检查器的说明,定型规则语句(stateassign)(t=booleanort=integer)(stateif)(statewhile),5.3简单类型检查器的说明,定型规则语句(stateseq),5.3简单类型检查器的说明,5.3.3类型检查设计语法制导的类型检查器设计依据是上节的类型系统类型环境的信息进入符号表对类型表达式采用抽象语法具体:arraynoft抽象:array(n,t)tpointer(t)考虑到报错的需要,增加了类型type_error,5.3简单类型检查器的说明,5.3.3类型检查声明语句dd;ddid:taddtype(id.entry,t.type)addtype:把类型信息填入符号表,5.3简单类型检查器的说明,5.3.3类型检查声明语句dd;ddid:taddtype(id.entry,t.type)tbooleant.type=booleantintegert.type=integertt1t.type=pointer(t1.type),5.3简单类型检查器的说明,5.3.3类型检查声明语句dd;ddid:taddtype(id.entry,t.type)tbooleant.type=booleantintegert.type=integertt1t.type=pointer(t1.type)tarraynumoft1t.type=array(num.val,t1.type),5.3简单类型检查器的说明,5.3.3类型检查声明语句dd;ddid:taddtype(id.entry,t.type)tbooleant.type=booleantintegert.type=integertt1t.type=pointer(t1.type)tarraynumoft1t.type=array(num.val,t1.type)tt1t2t.type=t1.typet2.type,5.3简单类型检查器的说明,类型检查表达式etruthe.type=booleanenume.type=integereide.type=lookup(id.entry),5.3简单类型检查器的说明,类型检查表达式etruthe.type=booleanenume.type=integereide.type=lookup(id.entry)ee1mode2e.type=ife1.type=integerande2.type=integerthenintegerelsetype_error,5.3简单类型检查器的说明,类型检查表达式ee1e2e.type=ife2.type=integerande1.type=array(s,t)thentelsetype_error,5.3简单类型检查器的说明,类型检查表达式ee1e2e.type=ife2.type=integerande1.type=array(s,t)thentelsetype_erroree1e.type=ife1.type=pointer(t)thentelsetype_error,5.3简单类型检查器的说明,类型检查表达式ee1e2e.type=ife2.type=integerande1.type=array(s,t)thentelsetype_erroree1e.type=ife1.type=pointer(t)thentelsetype_erroree1(e2)e.type=ife2.type=sande1.type=stthentelsetype_error,5.3简单类型检查器的说明,类型检查语句sid:=eif(id.type=e.type,5.3简单类型检查器的说明,类型检查语句sid:=eif(id.type=e.typesifethens1s.type=ife.type=booleanthens1.typeelsetype_error,5.3简单类型检查器的说明,类型检查语句swhileedos1s.type=ife.type=booleanthens1.typeelsetype_error,5.3简单类型检查器的说明,类型检查语句swhileedos1s.type=ife.type=booleanthens1.typeelsetype_errorss1;s2s.type=ifs1.type=voidands2.type=voidthenvoidelsetype_error,5.3简单类型检查器的说明,类型检查程序pd;sp.type=ifs.type=voidthenvoidelsetype_error,5.3简单类型检查器的说明,5.3.4类型转换ee1ope2e.type=ife1.type=integerande2.type=integerthenintegerelseife1.type=integerande2.type=realthenrealelseife1.type=realande2.type=integerthenrealelseife1.type=realande2.type=realthenrealelsetype_error,5.4多态函数,5.4.1为什么要使用多态函数例:用pascal语言写不出求表长度的通用程序typelink=cell;cell=recordinfo:integer;next:linkend;,5.4多态函数,functionlength(lptr:link):integer;varlen:integer;beginlen:=0;whilelptrnildobeginlen:=len+1;lptr:=lptr.nextend;length:=lenend;,5.4多态函数,用ml语言很容易写出求表长度的程序而不必管表元的类型。funlength(lptr)=ifnull(lptr)then0elselength(tl(lptr)+1;,5.4多态函数,用ml语言很容易写出求表长度的程序而不必管表元的类型。funlength(lptr)=ifnull(lptr)then0elselength(tl(lptr)+1;length(“sun”,“mon”,“tue”)length(10,9,8)都等于3,5.4多态函数,多态函数允许变元有不同的类型,5.4多态函数,多态函数允许变元有不同的类型体中的语句可以在变元类型不同的情况下执行(区别于重载的特征),5.4多态函数,多态函数允许变元有不同的类型体中的语句可以在变元类型不同的情况下执行(区别于重载的特征)多态算符用于以不同类型的变元执行的代码段,5.4多态函数,多态函数允许变元有不同的类型体中的语句可以在变元类型不同的情况下执行(区别于重载的特征)多态算符用于以不同类型的变元执行的代码段例如:数组索引,5.4多态函数,多态函数允许变元有不同的类型体中的语句可以在变元类型不同的情况下执行(区别于重载的特征)多态算符用于以不同类型的变元执行的代码段例如:数组索引、函数作用,5.4多态函数,多态函数允许变元有不同的类型体中的语句可以在变元类型不同的情况下执行(区别于重载的特征)多态算符用于以不同类型的变元执行的代码段例如:数组索引、函数作用、通过指针间接访问,5.4多态函数,多态函数允许变元有不同的类型体中的语句可以在变元类型不同的情况下执行(区别于重载的特征)多态算符用于以不同类型的变元执行的代码段例如:数组索引、函数作用、通过指针间接访问c语言手册中关于指针beginreturnpend;,5.4多态函数,例:functionderef(p);-对p的类型一无所知:beginreturnpend;,5.4多态函数,例:functionderef(p);-对p的类型一无所知:beginreturnp-=pointer()end;,5.4多态函数,例:functionderef(p);-对p的类型一无所知:beginreturnp-=pointer()end;deref的类型是.pointer(),5.4多态函数,5.4.3一个含多态函数的语言pd;e引入类型变量、笛卡dd;d|id:q儿积类型、多态函数qtype-variable.q|tttt|tt|unary-constructor(t)|basic-type|type-variable|(t)ee(e)|e,e|id,5.4多态函数,5.4.3一个含多态函数的语言pd;e引入类型变量、笛卡dd;d|id:q儿积类型、多态函数qtype-variable.q|tttt|tt这是一个抽象语言,|unary-constructor(t)忽略了函数定义的|basic-type函数体|type-variable|(t)ee(e)|e,e|id,5.4多态函数,5.4.3一个含多态函数的语言pd;edd;d|id:qqtype-variable.q|tttt|tt|unary-constructor(t)一个程序:|basic-typederef:.pointer();|type-variableq:pointer(pointer(integer);|(t)deref(deref(q)ee(e)|e,e|id,5.4多态函数,类型系统中增加的推理规则环境规则(envvar)语法规则(typevar)(typeproduct),5.4多态函数,类型系统中增加的推理规则语法规则(typeparenthesis)(typeforall)(typefresh),5.4多态函数,类型系统中增加的推理规则定型规则(exppair)(expfuncall)(s是t1和t3的最一般的合一代换),5.4多态函数,5.4.4代换、实例和合一代换:类型表达式中的类型变量用其所代表的类型表达式去替换,5.4多态函数,5.4.4代换、实例和合一代换:类型表达式中的类型变量用其所代表的类型表达式去替换functionsubst(t:type_expression):type_expression;beginift是基本类型thenreturntelseift是类型变量thenreturns(t)elseift是t1t2thenreturnsubst(t1)subst(t2)end,5.4多态函数,实例把subst函数用于t后所得的类型表达式是t的一个实例,用s(t)表示。例子(st表示s是t的实例)pointer(integer)pointer()pointer(real)pointer()integerintegerpointer(),5.4多态函数,下面左边的类型表达式不是右边的实例integerreal代换不能用于基本类型integerreal的代换不一致integer的所有出现都应该代换,5.4多态函数,合一如果存在某个代换s使得s(t1)=s(t2),那么这两个表达式t1和t2能够合一最一般的合一代换s(t1)=s(t2);对任何其它满足s(t1)=s(t2)的代换s,代换s(t1)是s(t1)的实例,5.4多态函数,5.4.5多态函数的类型检查多态函数和普通函数在类型检查上的区别(1)同一多态函数的不同出现无须变元有相同类型,5.4多态函数,(2)必须把类型相同的概念推广到类型合一,5.4多态函数,(2)必须把类型相同的概念推广到类型合一(3)要记录类型表达式合一的结果,5.4多态函数,检查多态函数的翻译方案ee1(e2)p=mkleaf(newtypevar);unify(e1.type,mknode(,e2.type,p);e.type=pee1,e2e.type=mknode(,e1.type,e2.type)eide.type=fresh(lookup(id.entry),5.4多态函数,5.4多态函数,确定表长度的ml函数funlength(lptr)=ifnull(lptr)then0elselength(tl(lptr)+1;,5.4多态函数,length:;lptr:;if:.boolean;null:.list()boolean;tl:.list()list();0:integer;1:integer;+:integerintegerinteger;match:.;match(length(lptr),if(null(lptr),0,length(tl(lptr)+1),5.4多态函数,5.4多态函数,5.4多态函数,5.4多态函数,funlength(lptr)=ifnull(lptr)then0elselength(tl(lptr)+1;length函数的类型是.list()integer,5.5类型表达式的等价,当允许对类型表达式命名后:类型表达式是否相同就有了不同的解释出现了结构等价和名字等价两个不同的概念typelink=cell;varnext:link;last:link;p:cell;q,r:cell;,5.5类型表达式的等价,5.5.1类型表达式的结构等价两个类型表达式完全相同(当无类型名时)typelink=cell;varnext:link;last:link;p:cell;q,r:cell;,5.5类型表达式的等价,5.5.1类型表达式的结构等价两个类型表达式完全相同(当无类型名时)类型表达式树一样typelink=cell;varnext:link;last:link;p:cell;q,r:cell;,5.5类型表达式的等价,5.5.1类型表达式的结构等价两个类型表达式完全相同(当无类型名时)类型表达式树一样相同的类型构造符作用于相同的子表达式typelink=cell;varnext:link;last:link;p:cell;q,r:cell;,5.5类型表达式的等价,5.5.1类型表达式的结构等价两个类型表达式完全相同(当无类型名时)把类型名都用它们定义的类型表达式代换,所得两类型表达式完全相同(类型定义无环时)typelink=cell;varnext:link;last:link;p:cell;q,r:cell;,5.5类型表达式的等价,类型表达式的结构等价测试sequiv(s,t)(无类型名时)ifs和t是相同的基本类型thenreturntrueelseifs=array(s1,s2)andt=array(t1,t2)thenreturnsequiv(s1,t1)andsequiv(s2,t2)elseifs=s1s2andt=t1t2thenreturnsequiv(s1,t1)andsequiv(s2,t2)elseifs=pointer(s1)andt=pointer(t1)thenreturnsequiv(s1,t1)elseifs=s1s2andt=t1t2thenreturnsquiv(s1,t1)andsequiv(s2,t2)elsereturnfalse,5.5类型表达式的等价,5.5.2类型表达式的名字等价把每个类型名看成是一个可区别的类型typelink=cell;varnext:link;last:link;p:cell;q,r:cell;,5.5类型表达式的等价,5.5.2类型表达式的名字等价把每个类型名看成是一个可区别的类型两个类型表达式名字等价当且仅当这两个类型表达式不做名字代换就结构等价typelink=cell;varnext:link;last:link;p:cell;q,r:cell;,5.5类型表达式的等价,pascal的许多实现用隐含的类型名和每个声明的标识符联系起来typelink=cell;typelink=cell;varnext:link;np=cell;last:link;nqr=cell;p:cell;varnext:link;q,r:cell;last:link;p:np;q:nqr;r:nqr;,5.5类型表达式的等价,注意:类型名字的引入只是类型表达式的一个语法约定问题,它并不像引入类型构造符或类型变量那样能丰富我们所能表达的类型,5.5类型表达式的等价,5.5.3记录类型(typerecord)(li是有区别的)(valrecord)(li是有区别的)(valrecordselect),5.5类型表达式的等价,5.5.4类型表示中的环typelink=cell;cell=recordinfo:integer;next:linkend;,5.5类型表达式的等价,5.5.4类型表示中的环typelink=cell;cell=recordinfo:integer;next:linkend;,5.5类型表达式的等价,c语言对除记录(结构)以外的所有类型使用结构等价,而记录类型用的是名字等价,以避免类型图中的环。,5.6函数和算符的重载,重载符号有多个含义,但在引用点的含义都是唯一的例如:加法算符+可用于不同类型,是不同的函数在ada中,()是重载的,a(i)有不同含义,5.6函数和算符的重载,重载符号有多个含义,但在引用点的含义都是唯一的例如加法算符+可用于不同类型,是不同的函数在ada中,()是重载的,a(i)有不同含义重载的消除在重载符号的引用点,其含义能确定到唯一,5.6函数和算符的重载,5.6.1子表达式的可能类型集合例ada语言声明:function“”(i,j:integer)returncomplex;function“”(x,y:complex)returncomplex;,5.6函数和算符的重载,5.6.1子表达式的可能类型集合例ada语言声明:function“”(i,j:integer)returncomplex;function“”(x,y:complex)returncomplex;使得算符重载,可能的类型包括:integerintegerintegerintegerintegercomplexcomplexcomplexcomplex,5.6函数和算符的重载,5.6.1子表达式的可能类型集合例ada语言声明:function“”(i,j:integer)returncomplex;function“”(x,y:complex)returncomplex;使得算符重载,可能的类型包括:integerintegerinteger2(35)integerintegercomplexcomplexcomplexcomplex,5.6函数和算符的重载,5.6.1子表达式的可能类型集合例ada语言声明:function“”(i,j:integer)returncomplex;function“”(x,y:complex)returncomplex;使得算符重载,可能的类型包括:integerintegerinteger2(35)integerintegercomplex(35)zcomplexcomplexcomplex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 3.水能和风能说课稿-2025-2026学年初中物理教科版八年级下册-教科版2012
- 学校安全网格化管理方案
- 循环经济视角下镁合金压铸件全生命周期碳排放核算与优化策略
- 循环经济模式下清洁耗材标准化包装与箱体兼容性矛盾
- 平台经济中刷子账号的边际成本曲线与平台流量分配的经济学悖论
- 工业级生产中苯并噻唑衍生物纯化工艺对杂质峰分离的膜分离-色谱联用优化策略
- UNIT 6 Free time说课稿-2025-2026学年初中英语剑桥英语青少版第二版第一级-剑桥英语青少版第二版
- 第三课 植物栽培初步教学设计-2023-2024学年初中综合实践活动八年级上册人民版(四川)
- 五、物体的浮与沉说课稿-2025-2026学年初中物理苏科版八年级下册-苏科版2012
- 中国邮政2025云南省秋招网点柜员岗位面试模拟题及答案
- 强化学习在信息路由中的应用
- CE安全标准规范(电气类)
- 大象版科学新大象版 五年级上册科学课件-3.2《生活习惯与健康》(练习+视频)
- Satyam-audit-failure-case-auditing-speech(萨蒂扬公司审计失败的案例分析)
- 医学检验技术临床案例及分析
- 第3课《追求人生理想》第2框《努力把人生理想变为现实》-【中职专用】《哲学与人生》同步课堂课件
- 第七届全国急救大赛(医生组)理论测试考试题库及答案
- (2024版)大学本科新增专业《生物育种技术》解读
- AGV拖车电机选择计算表
- 舌癌手术步骤课件
- 老师孤独症培训课件
评论
0/150
提交评论