下面程序段的输出结果是( )。 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 ar

题目

下面程序段的输出结果是( )。 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; } }

A.9

B.18

C.20

D.22


相似考题
更多“下面程序段的输出结果是( )。 class Base { int i; Base { add(1); } void add(int v) { i+ ”相关问题
  • 第1题:

    下面程序的输出结果是【】。include using namespace std; class base { protected: int

    下面程序的输出结果是【 】。

    include <iostream>

    using namespace std;

    class base

    {

    protected:

    int a;

    public:

    base(){cout<<"0":}

    };

    class basel: virtual public base

    {

    public:

    base1(){ cout<<"1";}

    };

    class base2 : virtual public base

    {

    public:

    base2(){cout<<"2";}

    };

    class derived : public base1,public base2

    {

    public:

    derived () {cout<<"3"; }

    }

    int main ()

    {

    derived obj;

    cout<<end1;

    return 0;

    }


    正确答案:0123
    0123 解析:本题考核含有虚基类的继承中构造函数的调用顺序,应该先调用基类的构造函数,接着是按照派生类继承列表的顺序依次调用虚基类的构造函数,最有调用派生类自己的构造函数.题中先调用base的构造函数,然后调用base1、base2的构造函数,最后调用derived的构造函数。

  • 第2题:

    下面程序段的输出结果是 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+=*2; } } public class Test { public static void main(String args[]) { bogo(new Extension()); } static void bogo(Base b) { b.add(8); b.print(); } }

    A.9

    B.18

    C.20

    D.22


    正确答案:D
    解析:本题考查继承和构造函数的用法。首先要明确对一个类的继承是指在父类的基础上构建了一个子类,子类继承了父类的方法和状态。题目所给程序段创建的是Extension类的实例,在运行时,从main()函数进入程序,所有调用add()方法的过程将始终和Extension类的add()方法动态绑定。初始值:i=O;创建实例newExtension();先调用父类的默认构造函数Base(),并在父类的默认构造函数中执行add(1),i=0+1x2,所以i=2,再调用子类的默认构造函数Extension(),子类的默认构造函数中执行add(2),i=2+2x2,所以i=6:执行add(8);i=6+8x2,因此,最终i=22,正确答案为选项D。

  • 第3题:

    下列程序的输出结果是______。 include class base { int x,y; public: base(int i,i

    下列程序的输出结果是______。

    include<iostream.h>

    class base

    {

    int x,y;

    public:

    base(int i,int j){x=i;y=j;}

    virtual int add( ){return x+y;}

    };

    class three:public base

    {

    int z;

    public:

    three(int i,int j,int k):base(i,j){z=k;)

    int add( ){return(base::add( )+z);}

    };

    void main( )

    {

    three*q=new three(10,20,30);

    cout<<q->add( )<<endl;

    }


    正确答案:60
    60 解析:本题考察继承中子类对父类的继承方式,注意子类的add成员函数,它直接使用了父类的成员函数进行运算。

  • 第4题:

    如下程序是为变量i赋值。若程序的输出结果是180。请将程序补充完整。

    注意:不改动程序结构,不得增行或删行。

    class Base

    {

    int i;

    Base()

    {

    add(10);

    }

    void add(int v)

    {

    i+=v;

    }

    void print()

    {

    System.out.println(i);

    }

    }

    class Extension extends Base

    {

    Extension()

    {

    add(______);

    }

    void add(int v)

    {

    i+=v*2;

    }

    }

    public class ConstructTest3

    {

    public static void main(String args[])

    {

    bogo(new Extension());

    }

    static void bogo(Base b)

    {

    b.add(60);

    b.print();

    }

    }


    正确答案:20
    20 解析:本题综合考查了几个知识点,如调用子类的构造函数时,会先调用父类的构造函数;如果在子类的构造函数中没有显示调用父类的构造函数,那么创建子类的实例时,会先调用父类的缺省构造函数;方法的动态绑定。这些知识是考试的难点。以上代码创建的是Extension类的实例,所以,在运行时,所有调用add()方法的过程,将始终和Extension类的 add()方法动态绑定。以下是程序依次对变量i的改变过程。
    初始值:i=0
    Step1:创建实例new Extension()
    先调用父类的缺省构造函数Base(),注意,父类中的add方法已被子类重写。父类的缺省构造函数中执行add(10),i=0+10*2得到i=20,再调用子类的缺省构造函数Extension(),假设横线处应填入的数是x,子类的缺省构造函数中执行add(x),i=20+x*2。
    step2:执行add(60)
    i=20+x*2+60*2=180得到x=20

  • 第5题:

    下面程序段的输出结果是( )。 classBase { inti; Base() { add(1); } voidadd(intV) { i+=v; } Voidphnt() { System.out.println(i); } } Class EXtenSiOneXtendSBaSe { ExtensiOn() { add(2); } voidadd(int v) { i+=v*2; } } public class TeSst { publicstatic voidmain(String argS[]) { bogo(new Extension()); } Static voidbogo(Base B) { b.add(8); b.phnt(); } }

    A.9

    B.18

    C.20

    D.22


    正确答案:D
    解析: 本题考查继承和构造函数的用法。首先要明确对一个类的继承是指在父类的基础上构建了一个子类,子类继承了父类的方法和状态。题目所给程序段创建的是Extension类的实例,在运行时,从main()函数进入程序,所有调用add()方法的过程将始终和Extension类的add()方法动态绑定。初始值:i=0:创建实例newExtension();先调用父类的默认构造函数 Base(),并在父类的默认构造函数中执行ada(1),i=0+1×2,所以i=2,再调用子类的默认构造函数Extension(),子类的默认构造函数中执行add(2),i=2+2×2,所以i=6;执行add(S):i=6+8×2,因此,最终i=22,正确答案为选项D。