习题2
2-1 Pascal 语言赋值语句为A:=A+2,假定A有初值为0,试设想机器如何实现这个赋值语句?哪些值是可见的?哪些值是不可见的?
2-2 在正文2.3节中指出的对数据聚合的6种方法,不同的语言有不同的表现,试用你所了解的几种语言对比这6种方法的不同用法。
2-3 试举出一些超载(或多态)的运算符。
2-4 有限映像(即数组)的定义域类型DT到相应值的特定子集的绑定策略可以在编译时绑定,也可在对象建立时绑定,或在对象处理时绑定。请对上述3种情况举出语言结构的实例。
2-5 Pascal 类型定义机制与抽象数据类型有什么差别?
2-6 何谓强类型?它的优点是什么?
2-7 给出一个简单例子,证明Pascal原始定义不是强类型的。
2-8 何谓动态检查?何谓静态检查?试分别举出相应的例子。静态类型检查的含义是什么?
2-9 试设计一个测试程序,用来测试你所使用的Pascal编译程序所选用的类型相容规则。
2-10 试设计一个简单的测试程序,测试你所使用的Pascal实现的变体记录的安全性。
2-11 试设计一个简单的测试程序,评估你所使用的Pascal实现指针的安全性。
2-12 在2.7节中说明的类stack有一个属性first,它用来指向栈顶的第一个元素。属性pop,top,push和empty用来对栈实例进行操作。我们来讨论这样的问题:first是从类的外层可直接访问的,因此是非保护的。在类的外层分程序说明的所有变量和过程都是外层可访问的。为什么不能通过说明first为类的内层分程序的局部变量,使它成为外层不可访问的?能否使它成为局部于各过程中的一个过程?
2-13 SIMULA67 语言的类和抽象数据类型有什么不同?
2-14 CLU 语言的簇与Ada的程序包有什么不同?
2-15 在C语言中,为什么没有布尔(bool)型?