[单选题]下面程序段的输出结果是( )。 class Base { int i; Base { add(1); } void add(int v) { i+=v: } void print { System.out.println(i); } } class Extension extends Base { Extension { add(2); } void add(int v) { i+=v*2: } } public class Test { public static void main(String args[]) { bogo(new Extension); } static void bogo(Base b) { add(8); print; } }
正确答案 :D
22
解析:D。【解析】本题考查继承和构造函数的用法。首先要明确对一个类的继承是指在父类的基础上构建了一个子类,子类继承了父类的方法和状态。题目所给程序段创建的是Extension类的实例,在运行时,从main函数进入程序,所有调用add方法的过程将始终和Extension类的add方法动态绑定。初始值:i=0;创建实例newExtension;先调用父类的默认构造函数Base,并在父类的默认构造函数中执行add(1),i=O+1×2,所以i=2,再调用子类的默认构造函数Extension,子类的默认构造函数中执行add(2),i-2+2×2,所以i=6;执行add(8);i=6+8×2,因此,最终i=22,正确答案为选项D。
[单选题]以下程序的输出结果是 #includeiostream.h> void main( ) {int x=1,y=3; cout x++ ","; {int x=0;x+=y*2; cout X "," y ","; } cout x "," y; }
正确答案 :B
1,6,3,2,3
解析:解析:coutx++;语句中,程序先输出x的值,然后再加1,所以结果为1,此时x的值为2;在 int x=0;x+=y*2;语句中,将0的值赋给x,然后再运算 x+=y*2的值,结果为x=6(此时x的值为局部变量),y的值不变,在最后在执行了x语句后的值,所以应为2。
[单选题]B的输出结果为 ______。
正确答案 :B
20
解析:解析:命令SET UDFPARAMS TO REFERENCE 用来设置参数传递方式为按引用传递。也就是说,当形参变量值改变时,实参变量也是随之改变。但是由于本题采用的调用方式是:DO WITH,所以调用方式不受参数UDFPARAMS的影响。调用过程中变量A是按引用传递,变量B用括号括起来,因此B始终是按值传递。模块SWAP的功能是将两个变量交换。程序开始时变量 A和B的值分别为10和20,执行模块SWAP之后将A和B交换,由于变量A是按引用传递,因此交换后变量A指向B的地址,因此返回主程序后A的值为20,变量B为按值传递,模块结束后,其值仍为20,因此返回主程序后,变量A和B指向同一个地址,其值均为20。
查看原题