设有如下程序: #include <iostream> using namespace std; class A { public:int i;display(){co

题目
设有如下程序: include using namespace std; class A { public:int i;display(){co

设有如下程序: #include <iostream> using namespace std; class A { public: int i; display() { cout<<"class A\n"; } }; class B { public: int i; display() { cout<<"class B\n"; } }; class C : public A, public B { int j; public: int i; show ( ) { j = i * i; display(); } }; int main() { C demo; demo.show(); return O; } 则主程序运行时将( )。

A.因为变量i的重复定义而报错

B.因为对象demo间接调用display()函数时产生二义性而报错

C.因为类定义的语法错误而不能运行

D.没有语法错误,能够正常输出结果

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

第1题:

阅读下列说明和C++代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。
【说明】
以下C++代码实现一个简单绘图工具,绘制不同形状以及不同颜色的图形。部分类及其关系如图6-1所示。



【C++代码】
#include?#include?using?namespace?std;class?DrawCircle?{??????//绘制圆形,抽象类? ? ? public: (1);//定义参数为?int?radius,?int?x,?inty? ?virtual~DrawCircle()?{?}};class?RedCircle:public?DrawCircle?{????//绘制红色圆形? ? ? ? public: void?drawCircle(intradius,?int?x,?int?y)?{cout?<?drawCircle?=?drawCircle;? }? ?virtual~shape()?{?}? public:? ?virtual?void?draw()?=?0;};class?Circle:public?Shape?{????//圆形? ? private:? ? ?int?x,y,radius;? ? public:? Circle(int?x,inty,int?radius,DrawCircle?*drawCircle)? (3)? {? this->x?=?x;? ?this->y?=?y;? ? this->radius?=?radius; }? ? ? public:? void?draw(){? drawCircle?-> (4); }};int?main(){Shape?*redCirclenew?Circle(100,100,10,????(5)????);//绘制红色圆形? Shape?*greenCircle=new?Circle(100,100,10, (6)??);//绘制绿色圆形redCircle >draw();? ?greenCircle?->draw();? ?return?0;}


答案:
解析:
(6)(1)void drawCircle (int radius,int x,int y)
(2)DrawCircle*drawCircle
(3)drawcircle
(4)drawCircle(radius,x,y)
(5)new RedCircle()
(6)new GreenCircle()【解析】
第一空是填接口里面的方法,在接口的实现里面找,可以发现应该填void drawCircle (int radius,int x,int y)。
第二空可以根据后面this drawCircle=drawCircle判断,这里应该有一个drawCircle属性,因此应该填)DrawCircle drawCircle。
第三空这里填drawcircle,用-> drawcircle来引用父类的成员。
第四空调用drawCircle(radius,x,y)方法。
第五、六空分别创建一个红色圆形对象和一个绿色圆形对象作为Circle里面的实参。

第2题:

有如下程序:includeusing namespace std;Class TestClass{int a;public:TestClass(in

有如下程序: #include<iostream> using namespace std; Class TestClass {int a; public: TestClass(int x){a=x;} void show(){cout<<a;}}; class TestClass1:public TestClass {int b; public: TestClass1(int i):TestClass(i+1),b(i){} voi

A.5

B.1

C.0

D.2


正确答案:D
解析: TestClass为TestClass1的基类,在主函数main中定义TestClass对象b,*p。TestClassl对象d,p指向d,调用其show函数。“TestClass(int i):TestClass(i+1),b(i){}”语句中的TestClass基类参数为2,所以show输出2。

第3题:

设有如下程序:include class A{public:int i;display(){ cout<<"class A\n"; }};c

设有如下程序:#include <iostream. h>class A{public:int i;display(){ cout<<"class A\n"; }};class B{public:int i;display(){ cout<<"class B\n"; }};class C: public: A, public: B{int j;public:int i;show(){ j=i*i; display(); }};void main(){C demo;demo. show();}则主程序运行时,将( )。

A.因为变量i的重复定义而报错

B.因为对象demo间接调用display函数时产生歧义性而报错

C.因为类定义的语法错误而不能运行

D.没有语法错误,能够正常输出结果


正确答案:B

第4题:

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

有以下程序:

include <iostream>

using namespace std;

class A

{

public:

virtual void show()

{

cout<<"A";

}

};

class B : public A

{

public:

void show()

{

cout << "B";

}

};

void display( A * obj )

{

obj-> show();

}

int main ( )

{

A demol;

B demo2;

display( & demol );

display( & demo2 );

return 0;

}

执行后的输出结果为【 】。


正确答案:AB
AB 解析:本题考核赋值兼容原则以及派生与继承的应用。题中函数display()形参类型为类A,执行语句“display(&demo1);”则输出A。执行语句“display(&dem02);”时,由于show()函数为虚函数,所以调用类B中show()函数,输出B。所以最后结果为AB。

第5题:

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

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

include<iostream>

using naluespace std;

class A{

public:

______{eout<<"aa";}

};

class B:public A{

public:

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

};

int ulain( ){

B*P=new B;

delete P;

return 0;

}


正确答案:~A( )
~A( ) 解析:派生类和基类的析构函数调用顺序是先调用派生类的析构函数,然后调用基类的析构函数,打印“bb”说明已经在调用派生类的析构函数,则要继续打印“aa”,显然就只有定义在基类的析构函数中去打印,故答案为~A( )。

第6题:

有如下程序includeusing namespace std;class GA{public:virtual int f( ) {return 1

有如下程序 #include<iostream> using namespace std; class GA{ public: virtual int f( ) {return 1;} }; class GB:public GA{ public: virtual int f() {return 2;} }; void show(GA g){cout<<g.f();} void display(GA&g){cout<<g.f();} int main() { GA a;show(A) ;display(A) ; GB b;show(B) ;display(B) ; return 0; }运行时的输出结果是

A.1111

B.1211

C.1112

D.1212


正确答案:C

第7题:

已知程序的结果为1 2 3,请填空。 include template class A { public: T X,

已知程序的结果为1 2 3,请填空。

include<iostream.h>

template<class T>

class A

{

public:

T X, y, z;

void display( ) {cout < < x < < " " < < y < < " " < < z;}

};

void main( )

{

A<int>a1;

_____

_____

_____

a1.display( ) ;

}


正确答案:12 a1.x=1; 13 a1.y=2; 14 a1.z=3;
12 a1.x=1; 13 a1.y=2; 14 a1.z=3; 解析:通过程序的结果知道数据类型是int,所以调用时声明模板实参为int的,再对x、y、z进行赋值。

第8题:

程序的输出结果是【 】。 include using namespace std; class A{ public: A(){a=b=2;}

程序的输出结果是【 】。

include <iostream>

using namespace std;

class A{

public:

A(){a=b=2;}

A(int i,int j){a=i;b=j;}

void display(){cout<<a<<b;}

private:

int a,b;

};

void main(){

A m,n(4,8);

m.display();

n.display();

}


正确答案:2248
2248 解析:m对象使用和默认的构造函数,其a与b变量的值均为2;而n变量使用4和8来初始化程序的变量,a,b的值为4和8,依次输出的结果为2248。

第9题:

有如下程序:includeusing namespace std;class GA{public:virtual int f( ){return 1

有如下程序: #include<iostream> using namespace std; class GA{ public: virtual int f( ){return 1;} }; class GB:public GA{ public: virtual int f( ){return 2;} }; void show(GA g){eout<<g.f( );} void display(GA&g){cout<<g.f( );} int main( ){ GA a;show(A) ;display(A) ; GB b;show(B) ;display(B) ; return 0; } 程序的输出结果是

A.1111

B.1211

C.1112

D.1212


正确答案:C
解析:基类对象作为实参进行传递时,无论使用的是对象还是对象引用作为形参,都只能在该函数中调用基类成员函数,因此当GA a作为实参时,调用的只能是GA的成员函数。而当派生类对象作为实参传递时,函数的形参则要分情况而定:如果是普通的对象传递,则是值传递,那么在函数中也只能调用基类的成员函数;如果是对象引用作为形参,则是地址传递,这个时候函数就可以调用重载后的虚成员函数。