下列程序的运行结果是______。 include<iostream.h> class Base { public: virtual void func(int

题目
下列程序的运行结果是______。 include class Base { public: virtual void func(int

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

include<iostream.h>

class Base

{

public:

virtual void func(int i){cout<<"class Base:"<<i<<end1;)

};

class Derived: public Base

{

public:

void func(double d){cout<<"class Derived:"<<d<<endl;}

};

void main( )

{

Base a,*p=a;

Derived b;

p=&b;

(*p).func(3.3);

}

参考答案和解析
正确答案:class Base:3
class Base:3 解析:题中基类和派生类中有同名函数,但是参数不同。派生关系中,只有在函数类型、函数名和参数个数、参数类型完全相同时,才表现多态性。本题中参数不同,编译器便认为是两个完全不同的函数。通过基类的指针指向派生类对象时,该指针只能访问到派生类中具有多态性的成员函数,而与基类无关的函数是无法通过基类指针来访问的。故调用的是base类的 func函数,系统将3.3强制转化为整型数3。如果将派生类中的func的形参改为int型,则执行的就会是派生类的func函数,此时表现为多态。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

下面程序的运行结果是

#include

class base

{

protected:

int a;

public:

base(){ cout <<”0”;}

class basel:virtual base

}

public:

base 1(){cout <<”1”;}

};

class base2:virtual base

{

public:

base2(){cout <<”2”;(

};

class derived:public base1,public base2

{

public:

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

};

void main()

{

derived obj;

cout <

}

A.0123

B.3120

C.0312

D.3012


正确答案:A

第2题:

有如下程序:includeusing namespace std;Class Base{public:Base(){cout<<“BB”;f()

有如下程序: #include<iostream.h> using namespace std; Class Base { public: Base(){cout<<“BB”;f();} void{(){cout<<“BF”;} }; class Derived:public Base { public: Derived(){cout<<“DD”;} void f(){cout<<“Df”;) }; int main

A.BBBfDD

B.BBDfDDDf

C.DD

D.DDBBBf


正确答案:A
解析: 本趣考查的是类的继承和派生。派生类执行构造函数的一般次序为;首先调用基类构造函数,然后调用成员对象的构造函数,最后是派生类构造函数中的内容。题目中定义派生类对象d时,先调用基类Base的构造函数,输出BBBf,然后调用派生类Derived的构造函数,输出DD。

第3题:

以下程序的执行结果是【】。 include using namespace std; class base { public: virmal

以下程序的执行结果是【 】。

include<iostream>

using namespace std;

class base

{

public:

virmal void who(){cout<<"Base Class"<<endl;)

};

class Derivedl:public Base

{

public:

virtual void who(){cout<<"Derivedl Class"<<endl;}

};

class derived2:public Base

{

public:

virtual void who(){cout<<"Derived2 Class"<<endl;)

};

int main(int argc,char*argv[])

{

base obj1,*P;

deliVedl obj2;

derived2 obj3;

p=&obj1; p->who();

p=&obj2; p->who();

p=&obj3; p->who();

return 0;

}


正确答案:Base Class Derivedl Class Derived2 Class
Base Class Derivedl Class Derived2 Class

第4题:

下列程序的运行结果是______。include class Base { public: void f(int x){cout<<“B

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

include<iostream.h>

class Base

{

public:

void f(int x){cout<<“Base:”<<x<<endl;}

);

class Derived:public Base

{

public:

void f(char*str){cout<<“Derived:”<<str<<endl;}

};

void main(void)

{

Base*pd=ne


正确答案:Base:97。
Base:97。 解析: 本题主要考查两个知识点,一是基类指针可以指向派生类对象,并可以访问派生类的所有成员。二是在函数重载中进行隐式类型转换。如pd->f(‘a’);系统到底调用哪个重载函数呢?实参既不是派生类中的形参,也不是基类中f函数的形参类型。此时系统根据就近原则和从高优先级到低优先级的规则尝试隐式转换。单字符更接近整数,故调用的是基类的f函数。

第5题:

下面程序的运行结果是()。includeclass base{protected:int a;public:base(){cout<<

下面程序的运行结果是( )。 #include<iostream.h> class base{ protected: int a; public: base(){cout<<“0”;} }; Class basel:Virtual base{ public: basel(){cout<<“1”;} }; Class base2:virtual base{ public: base2(){cout<<“2”;)

A.0123

B.3120

C.0312

D.3012


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

第6题:

下面程序的运行结果是 include class base{ protected: int a; public: base( ) {c

下面程序的运行结果是

#include<iostream.h>

class base{

protected:

int a;

public:

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

};

class base l: virtual base{

public:

base l ( ) {cout < <"1";}

};

class base 2: virtual base{

public:

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

};

class derived: public base 1, public base2{

public:

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

};

void main( )

{

derive obj;

cout < < endl;

}

A.0123

B.3120

C.0312

D.3012


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

第7题:

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

有如下程序#include <iostream>using namespace std;class A{public:virtual void func1 (){ cout<<"A1"; }void func2(){ cout<<"A2"; }};class B: public A{public:void func l(){ cout<<"B1"; }void func2(){ cout<<"B2"; }};int main() {A *p=new B;p->func1();p->func2();return 0;}运行此程序,屏幕上将显示输出( )。

A.B1B2

B.A1A2

C.B1A2

D.A1B2


正确答案:C

第8题:

下列程序的输出结果是非曲直【 】。includeclass base{ int x, y;public: base(int 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(lO,20,30);

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

}


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

第9题:

下列程序的运行结果是______。 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这个重载的虚函数时,根据当前指向可确定调用子孙的同名虚函数。

第10题:

下面程序的输出结果是【】。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的构造函数。

更多相关问题