写出程序的输出结果public abstract class A{public A(){Console.WriteLine('A');}public virtual void Fun(){Console.WriteLine("A.Fun()");}}public class B: A{public B(){Console.WriteLine('B');}public new void Fun(){Console.WriteLine("B.Fun()");}public static void Main()

题目

写出程序的输出结果

public abstract class A

{

public A()

{

Console.WriteLine('A');

}

public virtual void Fun()

{

Console.WriteLine("A.Fun()");

}

}

public class B: A

{

public B()

{

Console.WriteLine('B');

}

public new void Fun()

{

Console.WriteLine("B.Fun()");

}

public static void Main()

{

A a = new B();

a.Fun();

}

}


相似考题
参考答案和解析
正确答案:
 
更多“写出程序的输出结果public abstract class A{public A(){Console.WriteLine('A');}public virtual void Fun(){Console.WriteLine("A.Fun()");}}public class B: A{public B(){Console.WriteLine('B');}public new void Fun(){Console.WriteLine("B.Fun()");}public static void Main()”相关问题
  • 第1题:

    下面程序输出的结果是【 】。 include using namespacc std; class A { public:void sho

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

    include <iostream>

    using namespacc std;

    class A {

    public:

    void show(){tout<<"A!";}

    };

    class B: public A{

    public:

    virtual void show(){cout<<"B!";}

    };

    class C: public B{

    public:

    virtual void show(){cout<<"C!";}

    };

    void show_info(A *i){i->show();}

    void main(){

    A ia;B ib;C ic;show_info(&ia); show_info(&ib);show_info(&ic);

    }


    正确答案:A! B! C!
    A! B! C! 解析:由于基类中声明了虚函数,故基类的引用可以调用不同类的虚函数。

  • 第2题:

    有如下程序:includeusing namespace std;class B{public:virtual void show( ){cout<

    有如下程序: #include<iostream> using namespace std; class B{ public: virtual void show( ){cout<<"B";} }; class D:public B{ public: void show( ){cout<<"D";} }; void funl(B*ptr){ptr->show( );} void fun2(B&ref);ref.show( );} void fun3(B b){b.show( );} int nlain( ){ B b,*P=Dew D; D d; funl(p); fun2(b); fun3(d); return 0; } 程序的输出结果是

    A.BBB

    B.BBD

    C.DBB

    D.DBD


    正确答案:C
    解析:基类指针可以指向派生类对象,在对象作为参数传递时,是通过“传值调用”传递给函数的,是单向传递。使用对象指针对函数参数进行传递时,是通过“传址调用”传递给函数的,即函数的形参对象和实参对象指针变量指向同一内存地址;使用对象引用作为函数参数时,也是通过“传址调用”传递给函数的。funl(p)传递的是类D对象的地址,所以调用类D的是show( ),fun2(b)调用的和传递的都是类B的对象引用,所以调用类B的show( )。调用’fun3(d)时,由于void fun3(B b)传递的虽然是D类对象,但是形参是B类对象,所以调用基类B的show( )。

  • 第3题:

    下列程序的输出结果为2,请将程序补充完整。 include using namespace std; class Basc

    下列程序的输出结果为2,请将程序补充完整。

    include<iostream>

    using namespace std;

    class Basc

    {

    public:

    【 】void fun(){cout<<1;}

    };

    class Dcrived:public Base

    {

    public:

    void fun(){cout<<2;}

    };

    int main()

    {

    Base*p=new Derived;

    p->fun();

    delete p;

    return 0;

    }


    正确答案:virtual
    virtual 解析:利用虚函数实现多态。

  • 第4题:

    在下面程序中,括号里应填()。 include using namespace std; class A { public: void

    在下面程序中,括号里应填( )。 #include <iostream> using namespace std; class A { public: void fun( ) { cout << "Hello" << endl; } }; class B:: public A { void fun( ) { ( ) //调用基类的函数fun( ) tout << "HI" << endl; } };

    A.fun()

    B.A. fun()

    C.A::fun()

    D.A->fun(


    正确答案:C
    解析:调用格式;类名>::成员名>或者类名>::成员名>(参数表>)。

  • 第5题:

    下列程序的输出结果为2,请将程序补充完整。 include using namespace std; class Base

    下列程序的输出结果为2,请将程序补充完整。

    include<iostream>

    using namespace std;

    class Base

    {

    public:

    ______void fun(){cout<<1;}

    };

    class Derived:public Base

    {

    public:

    void fun(){cout<<2;}

    };

    int main()

    {

    Base*p=new Derived;

    p->fur();

    delete p;

    return 0;

    }


    正确答案:virtual
    virtual 解析:本题考核虚函数的概念。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际指向的对象类的那个重定义版本,这样的调用称为多态调用。基类Base和派生类Derived中都定义了成员函数fun,但是有不同的实现。程序最后输出的结果为2,表明通过对象指针p调用的函数版本为派生类中定义的,只有把基类的fun函数定义为虚函数,才能满足要求。

  • 第6题:

    写出程序的输出结果:

    public class A

    {

    public virtual void Fun1(int i)

    {

    Console.WriteLine(i);

    }

    public void Fun2(A a)

    {

    a.Fun1(1);

    Fun1(5);

    }

    }

    public class B : A

    {

    public override void Fun1(int i)

    {

    base.Fun1 (i + 1);

    }

    public static void Main()

    {

    B b = new B();

    A a = new A();

    a.Fun2(b);

    b.Fun2(a);

    }

    }


    正确答案:
     

  • 第7题:

    请写出下面的输出:

    class B

    {

    public:

    virtual void Print(void)

    {

    printf(“B::Print\n”);

    }

    virtual void Reprint(void)

    {

    printf(“B:Reprint\n”);

    }

    void Algo(void)

    {

    Print();

    Reprint();

    }

    };

    class D : public B

    {

    public:

    virtual void Print(void)

    {

    printf(“D::Print\n”);

    }

    };

    void main()

    {

    B *p = new D();

    p->Print();

    p->Algo();

    }


    正确答案:
     

  • 第8题:

    下列程序的输出结果为2,请将程序补充完整。 include using namespaee std; class B

    下列程序的输出结果为2,请将程序补充完整。

    include <iostream>

    using namespaee std;

    class Base{

    public:

    ______void fun( ){cout<<1;}

    };

    class Derived:public Base{

    public:

    void fun( ){cout<<2;}

    };

    int main( ){

    Base*P=new Derived:

    p->fun( );

    delete P;

    return 0;

    }


    正确答案:virtual
    virtual 解析:在基类中的虚函数在派生类中被重新定义时,该函数仍然为虚函数,但是可以省略不写virtual关键字,在派生类对象中调用时,则调用被重新定义后的虚函数。

  • 第9题:

    下面的代码中有什么错误吗?_______

    using System;

    class A

    {

    public virtual void F(){

    Console.WriteLine("A.F");

    }

    }

    abstract class B:A

    {

    public abstract override void F();


    正确答案:
    答:abstract override 是不可以一起修饰.
            }                                            // new public abstract void F();

  • 第10题:

    下面的例子中

    using System;

    class A

    {

    public static int X;

    static A(){

    X=B.Y+1;

    }

    }

    class B

    {

    public static int Y=A.X+1;

    static B(){}

    static void Main(){

    Console.WriteLine("X={0},Y={1}",A.X,B.Y);

    }

    }

    产生的输出结果是什么?


    正确答案:
    答:x=1,y=2

  • 第11题:

    下面程序的结果是 ______。includeclass A{ public:virtual voidfun()=0{};};class

    下面程序的结果是 ______。 #include<iostream.h> class A{ public: virtual void fun()=0{}; }; class B:public A{ public: void fun () {cout<< "new file" ;} }; class C: public A{ public: void fun (){cout<<"open file"<< " " } }; class D: public A{ public: void fun () {cout<< "save file\n" ;} }; void main() { A a,*p; B b; C c; D d; p=&c; p->fun (); p=&b; p->fun (); p=&d; p->fun(); }

    A.new file open file save file

    B.new file new file new file

    C.编译出错

    D.open file new file save file


    正确答案:C

  • 第12题:

    下列程序片段中,能通过编译的是( )。 A.public abstract class Animal{ public void speak;}S

    下列程序片段中,能通过编译的是( )。

    A.public abstract class Animal{ public void speak;}

    B.public abstract class Animal{ public void speak{);}

    C.public class Animal{ pubilc abstract void speak;}

    D.public abstract class Animal{ pubile abstract void speak{};}


    正确答案:A
    A。【解析】Java中一个类是一个abstract类的子类,它必须具体实现父类的abstract方法。如果一个类中含有abstract方法,那么这个类必须用abstract来修饰(abstract类也可以没有abstract方法)。有abstract方法的父类只声明,由继承它的子类实现。所以选A。

  • 第13题:

    下列程序的运行结果是______。 include class A { public: virtual void use( ) {cou

    下列程序的运行结果是______。

    include<iostream.h>

    class A

    {

    public:

    virtual void use( ) {cout<<"in A\n";}

    };

    class B:public A

    {

    public:

    virtual void use( ) {cout<<"in B\n";}

    };

    class C:public B

    {

    public:

    virtual void use( ){cout<<"in C\n";}

    };

    void main( )

    {

    A*obj;

    bj=new C;

    obj->use( );

    delete obj;

    }


    正确答案:in C
    in C 解析:本题考查虚函数和多态性。原本obj指向祖先类,随后被赋值,指向新的子孙类,则在使用use这个重载的虚函数时,根据当前指向可确定调用子孙的同名虚函数。

  • 第14题:

    下面程序的运算结果是()。includeusing namespace std;class A{public:virtual void f

    下面程序的运算结果是( )。 #include<iostream> using namespace std; class A { public: virtual void fun()=0; }; class B:public A } public: void fun() {cout<<"new file"<<" ";} }; class C:public A { public: void fun() { cout<<"open file"<<" ";} }; void main() { A a, * p; B b;C c; p=&c; p->fun(); p=&b; }

    A.new file open file

    B.new file new file

    C.编译出错

    D.open file new file


    正确答案:C
    解析:语句Aa,*p;用抽象类说明了一个对象,这是不允许的。若把其改为A*p;则程序运行结果为D。

  • 第15题:

    有如下程序:includeusing namespace std;class TestClass1{public:virtual void fun(

    有如下程序: #include<iostream> using namespace std; class TestClass1 { public: virtual void fun(){cout<<"1";} }; class TestClass2: public TestClass1 { public: TestClass2(){cout<<"2";} }; class TestClass3:public TestClass2 { public: virtual void fun(){TestClass2::fun();cout<<"3";} }; int main() { TestClass 1 aa,*p; TestClass2 bb; TestClass3 cc; p=&cc; P->fun(); return 0; } 执行上面程序的输出是( )。

    A.1122

    B.2112

    C.2213

    D.2223


    正确答案:C
    解析:主函数中定义TestClass1的对象aa,*p对象指针,TestClass2的对象bb以及TestClass3的对象cc。p指向cc,TestClass3为TestClass2的派生类,构造函数输出2。TestClass3中fun函数中为TestClass2中的。fun,调用TestClass2的构造函数,输出2。“p->fun();”,TestClass2继承于TestClass1中的fun,所以输出1。然后输出TestClass3中的“cout”3””,即输出3。

  • 第16题:

    执行如下程序将输出():includeusing namespace std;class Base{public:Base(){cout<<

    执行如下程序将输出( ): #include<iostream> using namespace std; class Base { public: Base(){cout<<"BB";fun();} void fun (){tout<<"Brim";} }; class Derived:public Base { public: Derived(){cout<<"DD";} void fun (){cout<<"Dfun";} }; int main(){Derived d;return 0;}

    A.DD

    B.BBDfunDDDfun

    C.BBBfunDD

    D.DDBBBfun


    正确答案:C
    解析:C++中创建一个类的实例时,如果该类存在基类,将首先执行基类的构造函数,然后执行该类本身的构造函数。本题中首先执行类Base的构造函数,所以将先输出“BB”,然后调用基类成员函数fun(),输出“Bfun”,最后调用子类Derived的构造函数输出“DD”。

  • 第17题:

    下列程序片段中,能通过编译的是( )。

    A.public abstract class Animal{public void speak( );}

    B.public abstract class Animal{public void speak( ){};}

    C.public class Animal{pubilc abstract void speak( );}

    D.public abstract class Animal{pubile abstract void speak( ){};}


    正确答案:D
    Java中一个类是一个abstract类的子类,它必须具体实现父类的abstract方法。如果一个类中含有abstract方法,那么这个类必须用abstract来修饰(abstract类也可以没有abstract方法)。有abstract方法的父类只声明,由继承他的子类实现。所以选D。

  • 第18题:

    以下程序执行结果是 ( )。include class Base{public virtual void fun() {cout<<"B

    以下程序执行结果是 ( )。 #include <iostream.h> class Base { public virtual void fun() { cout<<"B"; } }; class Derived { public: Derived() { cout<<"D"; } virtual void fun(){ Base::fun(); cout<<"C"; } } int main () { Base *ptr; Derived obj; ptr=&obj; p->fun ( ); return 0; }

    A.DBC

    B.DCB

    C.BDC

    D.CBD


    正确答案:A
    解析:本题考核虚函数的应用。主函数中创建派生类Derived的对象。obj时,调用其构造函数首先输出字符'D'。然后调用fun()函数,由于派生Derived已对基类的虚函数fun()进行了重定义,所以语句“p->fun();”调用的是派生类中的函数fun(),即输出BC。所以答案为A选项。

  • 第19题:

    下面程序输出的结果是【 】。 include using namespace std; class A { public:virtual

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

    include <iostream>

    using namespace std;

    class A {

    public:

    virtual void show() {cout<<"A!";

    };

    class B: public A {

    public:

    void show() {cout << "B!";}

    };

    class C: public B{

    public:

    void show(){cout << "C!";}

    };

    void show_info(A &i) {i. show();}

    void main() {

    A ia; B ib; C ic; show_info(ia);show_info(ib); show_info(ic); }


    正确答案:A! A! A!
    A! A! A! 解析:由于基类中没有声明虚函数,故调用的全部是基类的函数。

  • 第20题:

    在下面的例子里

    using System;

    class A

    {

    public A()

    {

    PrintFields();

    }

    public virtual void PrintFields(){}

    }

    class BA

    {

    int x=1;

    int y;

    public B()

    {

    y=-1;

    }

    public override void PrintFields()

    {

    Console.WriteLine(x={0},y={1},x,y);

    }

    当使用new B()创建B的实例时,产生什么输出?


    正确答案:
    答:X=1,Y=0;x= 1 y = -1

  • 第21题:

    在下面的例子里

    using System;

    class A

    {

    public A(){

    PrintFields();

    }

    public virtual void PrintFields(){}

    }

    class B:A

    {

    int x=1;

    int y;

    public B(){

    y=-1;

    }

    public override void PrintFields(){

    Console.WriteLine("x={0},y={1}",x,y);

    }

    当使用new B()创建B的实例时,产生什么输出?


    正确答案:
    答:X=1,Y=0

  • 第22题:

    有如下程序:nclude using namespace std;class Base{public:void fun1() {cout << "B

    有如下程序:#nclude <iostream>using namespace std;class Base{ public:void fun1() {cout << "Base\n"; }virtual void fun2() {cout << "Base\n"; }};class Derived: public Base{ public:void fun1() {cout << "Derived\n"; }void fun2() {cout << "Derived\n"; }} void f(Base& b) { B. fun1(); B. fun2(); }int main(){Derived obj;f(obj);return 0;}

    A.Base Base

    B.Base Derived

    C.Derived Base

    D.Derived Derived


    正确答案:B

  • 第23题:

    以下程序执行后的输出结果是 ( )。include class Basel{public: void fun(){ cout<<

    以下程序执行后的输出结果是 ( )。 #include <iostream.h> class Basel { public: void fun(){ cout<<"Basel"<<end1; } }; class Base2 { public: void fun() { cout<<"Base2"<<end1; } } class Derived : public Basel,public Base2 { }; void main() { Derived Obj; Obj.fun(); }

    A.Basel

    B.Base2

    C.BaselBase2

    D.程序产生二义性


    正确答案:D
    解析:本题考核继承中可能出现的二义性问题;题中当派生类Derived的对象obj访问函数fun()时,由于无法确定访问的是基类Basel中的fun()函数还是基类Base2中fun()函数,从而对函数fun()的访问产生二义性。