在面向对象技术中,一个子类的对象同时又属于父类,它继承了父类的一切属性,这种多态性称为(34)。同一个算子在不同的表达式中可能有不同的操作意义,这种多态性称为(35)。编译程序根据上下文判定算子的操作意义,这称为(36)。

admin2009-05-15  32

问题 在面向对象技术中,一个子类的对象同时又属于父类,它继承了父类的一切属性,这种多态性称为(34)。同一个算子在不同的表达式中可能有不同的操作意义,这种多态性称为(35)。编译程序根据上下文判定算子的操作意义,这称为(36)。

选项 A、算子鉴别
B、算子操作
C、算子定义
D、算子运算

答案A

解析 在面向对象技术中,多态考虑的是类与类之间的层次关系以及类自身内部特定成员函数之间的关系问题,是解决功能和行为的再抽象问题。多态是指类中具有相似功能的不同函数用同一个名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。这也是人类思维方式的一种直接模拟,比如一个对象中有很多求两个数最大值的行为,虽然可以针对不同的数据类型,写很多不同名称的函数来实现,但事实上,它们的功能几乎完全相同。这时,就可以利用多态的特征,用统一的标识来完成这些功能。这样,就可以达到类的行为的再抽象,进而统一标识,减少程序中标识符的个数。严格地说,多态性可分为4类,分别为过载多态(重载多态)、强制多态、包含多态和参数多态,其中前两种统称为专用多态(特定多态),后面两种也称为通用多态。包含多态是研究类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现。包含多态最常见的例子就是子类型化,即一个类型是另一类型的子类型。参数多态的应用比较广泛,被称为最纯的多态。这是因为同一对象、函数或过程能以一致的形式用于不同的类型。参数多态与类属(类模板)相关联,类属是一个可以参数化的模板,其中包含的操作所涉及的类型必须用类型参数实例化。这样,由类模板实例化的各类都具有相同的操作,而操作对象的类型却各不相同。过载多态是同一算子(操作符、函数名等)被用来表示不同的功能,通过上下文以决定一个算子所代表的功能,即通过语法对不同语义的对象使用相同的算子,编译能够消除这一模糊。强制多态是通过语义操作把一个变元的类型加以变换,以符合一个函数的要求,如果不做这一强制性变换将出现类型错误。类型的变换可在编译时完成,通常是隐式地进行,当然也可以在动态运行时来做。从实现的角度来看,多态可划分为两类,分别是编译时的多态和运行时的多态。前者是在编译的过程中确定了同名操作的具体操作对象,而后者则是在程序运行过程中才动态地确定操作所针对的具体对象。这种确定操作的具体对象的过程就是联编(编联、束定或绑定)。联编是指计算机程序自身彼此关联的过程,也就是把一个标识符名和一个存储地址联系在一起的过程;用面向对象的术语讲,就是把一条消息和一个对象的方法相结合的过程。按照联编进行阶段的不同,可以分为两种不同的联编方法,分别为静态联编和动态联编,这两种联编过程分别对应着多态的两种实现方式。联编工作在编译连接阶段完成的情况称为静态联编。因为联编过程在程序开始执行之前进行的,因此有时也称为早期联编或前联编。在编译和连接过程中,系统就可以根据类型匹配等特征确定程序中操作调用与执行该操作代码的关系,其确定了某一个同名标识到底是要调用哪一段程序代码。有些多态类型,其同名操作的具体对象能够在编译、连接阶段确定,通过静态联编解决,比如过载、强制和参数多态等。和静态联编相对应,联编工作在程序运行阶段完成的情况称为动态联编,也称为晚期联编或后联编。在编译、连接过程中无法解决的联编问题,要等到程序开始运行之后再来确定,包含多态的操作对象的确定就是通过动态联编完成的。
转载请注明原文地址:https://jikaoti.com/ti/XJJ7FFFM
0

最新回复(0)