下列程序编译时发现pb->f(10);语句出现错误,其原因是______。 include<iostream.h> class Base {

题目
下列程序编译时发现pb->f(10);语句出现错误,其原因是______。 include class Base {

下列程序编译时发现pb->f(10);语句出现错误,其原因是______。

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)

{

Derived*pd=new Derived;

Pd->f(10);

}

参考答案和解析
正确答案:数据类型不匹配
数据类型不匹配 解析:pd为派生类Derived的指针,指向派生类的成员函数f(char*Str),不指向基类的f(intx)。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

按解释中的要求在下列程序划线处填入的正确语句是:() #include <iostream.h> class Base{ public: void fun() {cout<<"Base::fun"<<endl;} }; class Derived:public Base{ public: void fun() { _______________________//在此空格处调用基类的函数fun() cout<<"Derived::fun"<<endl;} };

A.fun();

B.Base.fun();

C.Base::fun();

D.Base->fun();


A解析:Test类实现了Runnable接口。

第2题:

如下程序编译时发生错误,错误的原因是show函数实现语句错误,则正确的语句应该为______。

include<iostream.h>

class test

{

private:

int hum;

public:

test(int);

void show( );

};

test::test(int n){num=n;}

test::show( ){cout<<num<<endl;}

void main( )

{

test T(10):

T.show( );

}


正确答案:void test::show( ){coutnumendl;}
void test::show( ){coutnumendl;} 解析:show成员函数的声明和实现不一致,即实现部分应有void修饰符,这样才能编译通过。

第3题:

在下列的程序的横线处填上适当的语句,使该程序的输出为12。include using namespace

在下列的程序的横线处填上适当的语句,使该程序的输出为12。

include<iostream.h>

using namespace std;

class Base

{

public:

int a,b;

Base(int i){a=i;}

};

class Derived:public Base

{

int a;

public:

Derived(int x):Base(x),b(x+1){};

void show()

{


正确答案:eoutBase::a。
eoutBase::a。 解析: 本题考查的是基类和派生类的构造函数。派生类构造函数的执行顺序:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。本题要求结果是输出12,分析题目,首先调用基类的构造函数,然后是调用子对象的构造函数,横线处要求输出基类成员a的值,填入toutBase::a即可。

第4题:

为使程序的输出结果为: Base:: fun 那么应在下列程序画线处填入的正确语句是( )。 #include <iostream> using namespace std; class Base { public: void fun () { cout<<"Base: :fun"<<end1; } }; class Derived : public Base { public: void fun ( ) { cout<<"Derived: :fun"<<end1; } }; int main ( ) { Base a,*pb; Derived b; _________; pb->fun(); //调用基类的成员函数 fun() return 0 ; }

A.pb=&a

B.pb=b

C.pb=&b

D.pb=&Base


正确答案:C
解析:本题程序中类Derived是从基类Base公有继承的。主函数中定义了一个基类对象a和一个指向基类对象的指针pb,又定义了一个派生类Derived对象b。当pb指向对象b时,pb->fun()调用基类Base的成员函数fun()。这是由于Derived是Base的子类型,因此可以将派生类Derived的对象b的地址赋值给指向基类Base的指针pb,但这时指针pb只能使用从基类Base继承的成员。

第5题:

下列程序如果去掉for循环外围的大括号对,则会出现编译错误。错误原因是______。

include<iostream.h>

int a=5;

void main( )

{

int a=10,b=20;

cout<<a<<","<<b<<endl;

{

int a=0,b=0;

for(int i=1;i<8;i++)

{

a+=i;

b+=a;

}

cout<<a<<","<<b<<","<<::a<<endl;

}

cout<<a<<","<<b<<endl;

}


正确答案:ab重定义
a,b重定义 解析:在本题中for循环外围的大括号对没有实质含义,仅用于函数的作用域范围。如果去掉该括号,编译错误就会发生,因为变量a,b出现了重定义错误。

第6题:

下面程序编译时发现ma[3]=9错误,其原因是______。 include class FunArray { int*pa;

下面程序编译时发现ma[3]=9错误,其原因是______。

include<iostream.h>

class FunArray

{

int*pa; //指向一个数组空问

int size; //数组元素个数

public:

FunArray(int a[],int thesize):pa(a),size(thesize){}

int Size( ){return size;}

}

};

void main( )

{

int s[]={3,7,2,1,5,4};

FunArray ma(s,sizeof(s)/sizeof(int));

ma[3]=9;

cout<<ma[3]<<endl;

}


正确答案:没有重载[]运算符
没有重载[]运算符 解析:ma不是一般的数组,而是一个新定义的类,尽管该类封装了一个数组,但新类并没有提供[]操作符的具体实现,因此是错误的。

第7题:

在下面程序中,A、B、C、D四句编译时不会出错的是()。include using namespace std;class

在下面程序中,A、B、C、D四句编译时不会出错的是( )。 #include <iostream> using namespace std; class Base{ public: Base(); Base(int e):count(C) {} virtual void print() const = 0; private: int count; }; class Derived :public Base{ public: Derived():Base(0) {} Derived(int C) :Base(C) {} void printt() const{cout<< "Derived"<<endl:} }; void main( ) { Derived d(10); Base *pb; pb = &d; //A Base &cb= d; Derived dd = *pb; //B Derived &cd = cb; //C Base bb = d; //D

A.A

B.B

C.C

D.D


正确答案:A
解析:B和C不符合赋值兼容规则,D不能建立抽象类的对象。

第8题:

下面程序的输出结果为:Base:: fun,请将程序补充完整。include class Base{public: 【】

下面程序的输出结果为:Base:: fun,请将程序补充完整。

include <iostream.h>

class Base{

public:

【 】 fun(){cout<<"Base::fun"<<end1:}

class Derived : public Base{

public:

【 】 fun(){ cout<<"Derived::fun"<<end1; }

};

int main()

{

Base a,*pb;

Derived b;

pb = &b;

pb->fun();

return 0;

}


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

第9题:

有如下程序: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。