计算机二级

有如下程序: #included<iostream> usingnamespacestd; classA{ public: virtualvoidfuncl(){cout<<"A1";) voidrune2(){cout<<"A2";}}; classB:publicA{ public: voidfuncl(){cout<<:"B1";} voidfunc2(){eout<<"B2";}}; intmain(){ A*p=newB; p->func1(); P->func2(); return0;} 执行

题目

有如下程序: #included<iostream> usingnamespacestd; classA{ public: virtualvoidfuncl(){cout<<"A1";) voidrune2(){cout<<"A2";}}; classB:publicA{ public: voidfuncl(){cout<<:"B1";} voidfunc2(){eout<<"B2";}}; intmain(){ A*p=newB; p->func1(); P->func2(); return0;} 执行该程序,屏幕上将显示输出( )。

A.B1B2

B.A1A2

C.B1A2

D.A1B2

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有如下程序:includeusing namespace std;classA{public:A(){cout<<"A";}};class B{pu

有如下程序: #include<iostream> using namespace std; classA { public: A(){cout<<"A";} }; class B{public:B(){cout<<"B";}}; class C:public A { B b; public: C(){cout<<"C";} }; int main(){C obj;return 0;} 执行后的输出结果是( )

A.ABC

B.BAC

C.ACB

D.CBA


正确答案:A

第2题:

请将如下程序补充完整,使得输出结果为:bbaa include using namespace std; class A {

请将如下程序补充完整,使得输出结果为:bbaa

include <iostream>

using namespace std;

class A {

public:

【 】{cout << "aa"; }

};

class B: public A{

public:

~B(){ cout << "bb"; }

};

int main () {

B *p= new B;

delete p;

return 0;

}


正确答案:~A()
~A() 解析:本题考查的知识点是:类的构造与析构。本题要求的输出结果中包含aa,所以基类A中填空位置处的函数一定要被执行。但主函数中仅仅创建了一个B类对象,然后释放了它,并没有调用什么函数。所以可以肯定填空处一定是要定义基类的构造或者析构函数。如果定义的是构造,那么盼肯定在new操作的时候就会被输出,而下面的bb是在析构函数中,会在delete时被输出。故可肯定应填入基类A的析构函数定义:~A()。

第3题:

有如下程序: include using namespace std; class A { public: virtual void f(){cout

有如下程序:

include<iostream>

using namespace std;

class A

{

public:

virtual void f(){cout<<"1";}

};

class B:public A

{

public:

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

};

class C:public B

{

public:

virtual void f(){B::f();cout<<"3";}

};

int main()

{

A aa,*p;

B bb;

C cc;

p=&cc;

p->f();

return 0;

}

执行上面程序的输出是______。


正确答案:2213
2213 解析:B bb将定义一个B型对象bb,这时需调用B的构造函数,在该构造函数中,将输出"2:;C cc将定义一个C型对象cc,这时需调用C的构造函数,面该函数为缺省构造函数,其将调用父类B的构造函数,在该构造函数中,将输出"2":由于p采用指针方式调用成员函数f,而f在基类中被声明为虚拟函数,故函数f的执行与指针p所指向对象的实际类型相一致,p指向一个C型对象cc,故执行p->f()时,将执行C的f函数,在该函数中,首先直接调用了父类B的函数f,而在B中直接继承了A类的f函数,故先要执行A的f函数,输出“1”,然后再输出“3”。

第4题:

有如下程序:includeusing namespace std;class A{public: A(){cout<<"A";}};classB{p

有如下程序: #include<iostream> using namespace std; class A{ public: A(){cout<<"A";} }; classB{public:B().{cout<<"B";}} classC:public A{ B b; public: C(){cout<<"C";} }; int main (){ C obj; return 0;} 执行后的输出结果是

A.CBA

B.BAC

C.ACB

D.ABC


正确答案:D
解析:本题考核类的继承与派生。派生类构造函数执行的一般次序如下:首先调用基类构造函数,调用顺序按照它们被继承时说明的顺序。然后调用子对象的构造函数,调用顺序按照它们在类中的说明顺序。最后是派生类构造函数中的内容。题中,类A是基类,类C是基类A的派生类,类B的对象b是类C的私有成员。所以最后的输出为ABC。

第5题:

有如下程序:includeusing namespace std;class A{public:A(){cout<<"A";}};class B{p

有如下程序: #include<iostream> using namespace std; class A { public: A(){cout<<"A";} }; class B{public:B(){cout<<"B";} }; class C:public A { B b; public:C(){cout<<"C";} }; int main() { C obj; return 0; } 执行后的输出结果是( )。

A.CBA

B. BAC

C.ACB

D.ABC


正确答案:D

第6题:

下面程序的运算结果是()。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。

第7题:

如下程序的输出结果是includeusing namespace std;class A{public:A( ){cout<<"A";}}

如下程序的输出结果是 #include<iostream> using namespace std; class A{ public: A( ){cout<<"A";} }; class B{public:B( ){cout<<"B";}}; class C:public A{ B b; public: C( ){cout<<"C";} }; int main( ){C obj;return 0;}

A.CBA

B.BAC

C.ACB

D.ABC


正确答案:D
解析:派生类的构造函数的执行顺序是,先调用基类的构造函数,然后调用派生类的构造函数。当类中的数据成员为对象时,先调用对象成员的构造函数。

第8题:

有如下程序: include using namespace std; class A { public:

有如下程序: #include<iostream> using namespace std; class A { public: A(){cout<<"A";} }; class B<public:B(){cout<<"B";)); class C:public A { B b; public: C(){cout<<"C";} }; int main(){Cobj;retum 0;} 执行后的输出结果是

A.CBA

B.BAC

C.ACB

D.ABC


正确答案:D
解析:本题考查基类构造函数,数据成员构造函数的调用次序。系统首先要通过派生类的构造函数调用基类的构造函数,对基类成员初始化:然后对派生类中新增的成员初始化。

第9题:

有如下程序:include using namespace std;class A {public: A() {cout<<"A";}};class

有如下程序: #include <iostream> using namespace std; class A { public: A() {cout<<"A";} }; class B {public:B() {cout<<"B";}}; class C: public A { Bb; public: C() {cout<<"C";} }; int main() {C obj;return 0;}执行后的输出结果是 ______。

A.CBA

B.BAC

C.ACB

D.ABC


正确答案:D
解析:在构造派生类对象时,基类的构造函数要优于派生类的构造函数先执行,所以D为正确答案。

第10题:

有如下程序:includeusing namespace std;class A {public:A(){cout<<"A";}};classB{p

有如下程序: #include<iostream> using namespace std; class A { public: A(){cout<<"A";} }; classB{public:B(){cout<<"B";}} classC:public A{ B b; public: C(){cout<<"C";} }; int main(){ C obj; return 0;} 执行后的输出结果是( )。

A.CBA

B.BAC

C.ACB

D.ABC


正确答案:D
解析:此题考查的是类的继承和派生。系统首先要通过派生类的构造函数调用基类的构造函数,对基类成员初始化:然后对派生类中的新增成员初始化。