C++程序设计知识点实例解析知到智慧树章节测试课后答案2024年秋青岛大学_第1页
C++程序设计知识点实例解析知到智慧树章节测试课后答案2024年秋青岛大学_第2页
C++程序设计知识点实例解析知到智慧树章节测试课后答案2024年秋青岛大学_第3页
C++程序设计知识点实例解析知到智慧树章节测试课后答案2024年秋青岛大学_第4页
C++程序设计知识点实例解析知到智慧树章节测试课后答案2024年秋青岛大学_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++程序设计知识点实例解析知到智慧树章节测试课后答案2024年秋青岛大学第一章单元测试

若有定义doublexx=3.14,*pp=&xx;则表达式*pp等价于()

A:&xxB:&3.14C:*xxD:xx

答案:xx有以下程序片段:

stringstr("HelloC++");

cout<<str.substr(5,3);

则程序的输出结果是()

A:++B:C++C:HelloD:loC++

答案:C++有以下程序片段:

stringstr("HelloC++");

cout<<str.insert(8,"World");

则程序的输出结果是()

A:HelloWorldC++B:HelloC+World+C:HelloC++WorldD:编译报错无法运行

答案:HelloC++World下面对引用的描述错误的是()

A:建立引用时,要对它初始化B:对引用初始化可以使用任意类型的变量C:引用是某个变量或对象的别名D:引用与其代表的对象具有相同的地址

答案:对引用初始化可以使用任意类型的变量编译系统区分重载函数的依据是()。

A:对应位次上参数的名字不同B:对应位次上参数的类型不同C:总的参数个数不同D:函数的返回值类型不同

答案:对应位次上参数的类型不同;总的参数个数不同若函数的返回值为引用类型,则该函数的调用表达式可以作为赋值运算的左值。()

A:错B:对

答案:对函数可设置默认参数,但不允许将一个函数的所有参数都设置为默认参数。()

A:对B:错

答案:错当使用setw(intn)、setprecision(intn)等带参数的输入/输出格式控制符时,需要在程序开头包含头文件iomanip。()

A:对B:错

答案:对运算符new分配的空间由运算符delete释放。()

A:错B:对

答案:对任何函数都可以声明为内联函数()

A:错B:对

答案:错

第二章单元测试

下列关于析构函数描述正确的是()

A:析构函数体中必须有delete语句B:析构函数在程序中必须被显示调用C:析构函数返回值类型是voidD:析构函数既没有参数也不可重载

答案:析构函数既没有参数也不可重载有如下类定义:

classSample{

intn;public:Sample(inti=0):n(i){}voidsetValue(intn0)};

成员函数setValue在类外实现的正确形式是()

A:voidSample::setValue(intn0){n=n0;}B:voidsetValue(intn0){n=n0;}C:setValue(intn0){n=n0;}D:Sample::setValue(intn0){n=n0;}

答案:voidSample::setValue(intn0){n=n0;}有如下程序片段:

classSample{

intn;public:Sample(inti=0):n(i){}voidsetValue(intn0){n=n0;}};SampleSobj;Sample*ptr=newSample;

则下面对成员函数setValue访问形式正确的是()

A:ptr.setValue(5)B:Sobj->setValue(5)C:ptr->setValue(5)D:Sobj.setValue(5)

答案:ptr->setValue(5);Sobj.setValue(5)有如下程序片段:

classSample{

intn;

protected:

intm;public:Sample(inti=0,intj=0):n(i),m(j){}voidsetValue(intn0,intm0){n=n0;m=m0;}};int

main(){SampleObj;

//①

Obj.n=3;

//②

Obj.m=4;

//③

Obj.setValue(3,4);//④

return0;}则主函数中有误的语句是()

A:都不是B:④C:②③D:①

答案:②③下类有关类的构造函数和析构函数叙述正确的是()

A:类的构造函数和析构函数都是在程序中被自动隐式调用,而不能由系统显示调用B:类的构造函数可以有多个,互为重载关系C:类的构造函数和析构函数都是在程序中被显示调用,而不能由系统自动隐式调用D:类的析构函数可以有多个,互为重载关系

答案:类的构造函数可以有多个,互为重载关系有如下类定义:

classTEST{

inta;public:intGetRef()const

//①{return&a;}intGetValue()const//②{returna;}voidSet(intn)const//③{a=n;}friendvoidShow(TESTaa)const//④{cout<<a;}};

则类中成员函数定义错误的序号是()

A:③B:②C:①D:④

答案:③;①;④类定义中数据成员初值的设定既可以在声明数据成员时进行,也可以在构造函数中进行。

()

A:对B:错

答案:错作用域运算符::只能用于类成员名的所属类限定。()

A:错B:对

答案:错访问类对象成员或结构变量成员时,使用的运算符有.和->。()

A:对B:错

答案:对若类AB的声明中没有析构函数和构造函数,则系统会自动为类AB添加缺省的析构函数~AB(){};和构造函数AB(){};()

A:错B:对

答案:对

第三章单元测试

下列关于常类型const的叙述错误的是()。

A:通过常对象可以调用一般成员函数B:必须使用成员初始化列表初始化常数据成员C:常成员函数中不能修改对象的数据成员D:不能修改常对象的数据成员

答案:通过常对象可以调用一般成员函数下列关于常成员的叙述正确的是()。

A:常数据成员可以被类对象共享B:常成员函数不能更新对象的状态C:常成员函数只能由常对象调用D:常数据成员可以在构造函数体中初始化

答案:常成员函数不能更新对象的状态假定Sample类中的成员函数show空参无返回值,且不会更改Sample类中数据成员的值,则show函数在类内正确的声明形式是()

A:voidPrint()const;B:voidPrintconst();C:constvoidPrint();D:voidconstPrint();

答案:voidPrint()const;有如下类声明:

classSample{

intk;constintm;public:Sample(intk1,intm1);};

则下列构造函数的定义形式中错误的是()

A:Sample::Sample(intk1,intm1):m(m1),k(k1){}B:Sample::Sample(intk1,intm1):m(m1){k=k1;}C:Sample::Sample(intk1,intm1):k(k1),m(m1){}D:Sample::Sample(intk1,intm1):k(k1){m=m1;}

答案:Sample::Sample(intk1,intm1):k(k1){m=m1;}下面程序中横线部分应填入的内容是(

classTEST{public:TEST(doubled):data(d){}voidPrint(){cout<<data<<endl;}staticintcount;private:doubledata;};

count=0;

A:staticintTEST::B:intTEST::C:intD:staticint

答案:intTEST::下列关于静态成员的描述错误的是()。

A:静态成员函数不能直接访问非静态数据成员B:静态数据成员的初始化不使用其构造函数C:静态数据成员定义后必须在类体内进行初始化D:静态成员可分为静态数据成员和静态成员函数

答案:静态数据成员定义后必须在类体内进行初始化下面程序的执行结果是()

classSample{

intn;public:Sample(inti){n=i;}friendintadd(Sample&s1,Sample&s2);};intadd(Sample&s1,Sample&s2){

returns1.n+s2.n;}intmain(){

Samples1(10),s2(20);cout<<add(s1,s2)<<endl;}

A:30B:40C:10D:20

答案:30下列关于友元关系描述正确的是()。

A:友元不是类的成员,但具有和类的成员函数一样的数据访问权限B:友元关系具有传递性,即B是A的友元,C是B的友元,则C一定是A的友元C:友元属于类的成员,因此具有和类的成员函数一样的数据访问权限D:友元关系具有对称性,即B是A的友元,则A一定是B的友元

答案:友元不是类的成员,但具有和类的成员函数一样的数据访问权限下列关于数据共享在类中描述正确的是()。

A:类通过友元声明实现类内数据向外界友元函数的共享B:类通过静态数据成员实现类对象间的数据共享C:类的封装性决定了类是封闭的,和外界不建立共享机制D:一个类的所有对象都是独立的,彼此间不共享任何数据

答案:类通过友元声明实现类内数据向外界友元函数的共享;类通过静态数据成员实现类对象间的数据共享下列函数中具有当前类的隐含指针this的是()。

A:静态成员函数B:析构函数C:友元函数D:构造函数

答案:析构函数;构造函数

第四章单元测试

下列函数中不能重载的是()

A:友元函数B:构造函数C:析构函数D:静态成员函数

答案:析构函数下列运算符中不能重载的是()

A:newB:!C:sizeofD:delete

答案:sizeof下列运算符必须重载为类成员函数的是()

A:==B:<=C:++D:=

答案:=假定复数类MyComplex声明如下:

classMyComplex{

floatreal,imag;public:

MyComplex(floatr=0,floati=0);

MyComplex(constMyComplex&other);

voidPrint()const;MyComplexoperator+(constMyComplex&other);friendMyComplexoperator*(constMyComplex&c1,constMyComplex&c2);};有MyComplexX(1,2),Y(3,4),Z(5,6);则对表达式X+Y;以及X*Z;理解正确的是(

A:operator+(X,Y);

X.operator*(Z);B:operator+(X,Y);

operator*(X,Z);C:X.operator+(Y);

X.operator*(Z);D:X.operator+(Y);

operator*(X,Z);

答案:X.operator+(Y);

operator*(X,Z);假定复数类MyComplex声明如下:

classMyComplex{

floatreal,imag;public:

MyComplex(floatr=0,floati=0);

MyComplex(constMyComplex&other);

voidPrint()const;MyComplexoperator+(constMyComplex&other);friendMyComplexoperator*(constMyComplex&c1,constMyComplex&c2);};有MyComplexX(1,2),Y(3,4),Z(5,6);则对表达式X+Y*Z;的理解正确的是(

A:operator*(X.operator+(Y),Z);B:X.operator+(operator*(Y,Z));C:(operator+(X,Y)).operator*(Z);D:operator+(X,operator*(Y,Z));

答案:X.operator+(operator*(Y,Z));下列关于类成员运算符重载和友元运算符重载说法正确的是()

A:成员运算符重载函数中不具有this指针,友元运算符重载函数中具有this指针B:成员运算符重载函数中具有this指针,友元运算符重载函数中不具有this指针C:成员运算符重载函数中不具有this指针,友元运算符重载函数中也不具有this指针D:成员运算符重载函数中具有this指针,友元运算符重载函数中也具有this指针

答案:成员运算符重载函数中具有this指针,友元运算符重载函数中不具有this指针假定类TEST中重载运算符<<,则运算符<<在类TEST中正确的声明形式为()

A:friendostream&operator<<(ostream&output,constTEST&obj);B:ostream&operator<<(ostream&output,constTEST&obj);C:friendostream&operator<<(constTEST&obj);D:ostream&operator<<(constTEST&obj);

答案:friendostream&operator<<(ostream&output,constTEST&obj);假定类Sample中重载运算符>>,则运算符>>在类Sample中正确的声明形式为()

A:friendistream&operator>>(istream&input,Sample&obj);B:friendSample&operator>>(constSample&obj);C:friendistream&operator>>(istream&input,constSample&obj);D:friendSample&operator>>(istream&input,constSample&obj);

答案:friendistream&operator>>(istream&input,Sample&obj);下标运算符[]在类中既可以重载为友元也可以重载为类成员。()

A:错B:对

答案:错重载的运算符保持原来的优先级和结合性以及操作数的个数。()

A:对B:错

答案:对

第五章单元测试

有以下程序片段:classBase{private:inta;

protected:

intb;

public:

Base(inti=0,intj=0):a(i),b(j)

{}};classDerived:publicBase{private:intc;

protected:

intd;

public:

Derived(inti=0,intj=0,intm=0,intn=0):Base(i,j),c(m),d(n)

{}};intmain(){Derivedobj;

obj.a=1;//①

obj.b=2;

//②

obj.c=3;

//③

obj.d=4;

//④

return0;}则主函数中所有语法有误的语句是(

A:①②③B:①②③④C:①②D:①

答案:①②③④有以下程序片段:classBase{private:inta;

protected:

intb;

public:

Base(inti,intj):a(i),b(j)

{}};classDerived:publicBase{private:intc;

protected:

intd;

public:

Derived(inti,intj,intm,intn):Base(i,j),c(m),d(n)

{}

voidfun()

{cout<<a<<endl;//①

cout<<b<<endl;//②

cout<<c<<endl;//③

cout<<d<<endl;//④}};则fun函数中语法有误的语句是(

A:②B:①C:③D:④

答案:①下列关于继承方式public的描述错误的是()。

A:基类中的public成员在派生类中仍为public成员B:基类中的private成员在派生类中仍为private成员C:基类中除了private成员以外,其它成员在派生类中都可以被直接访问D:基类中的protected成员在派生类中仍为protected成员

答案:基类中的private成员在派生类中仍为private成员派生类对象直接访问同名成员,在下列情形中不会出现二义性的是()

A:单继承中,派生类和直接基类各自声明有同名的成员B:多继承中,同名成员声明只出现在派生类的多个直接基类中,派生类并未声明该同名成员C:多继承中,派生类的多个直接基类具有共同的间接基类,派生类并未声明该同名成员D:单继承中,直接基类和间接基类各自声明有同名的成员,派生类并未声明该同名成员

答案:单继承中,派生类和直接基类各自声明有同名的成员;单继承中,直接基类和间接基类各自声明有同名的成员,派生类并未声明该同名成员具有虚基类的派生类在创建对象时,最先被调用的是()。

A:派生类自己的构造函数B:派生类中子对象类的构造函数C:虚基类的构造函数D:非虚基类的构造函数

答案:虚基类的构造函数有以下程序片段:classA{private:inta;

public:

A(inti=0):a(i)

{}};classB{private:intb;

public:

B(intj=0):b(j)

{}};classC:publicA{private:

intc;BBobj;

public:

C(inti,intj,intk):c(k),Bobj(j),A(i)

{}};intmain(){CCobj(1,2,3);

return0;}则主函数中对象Cobj在创建时,构造函数调用顺序从先到后依次是()

A:类C构造函数、类B构造函数、类A构造函数B:类B构造函数、类A构造函数、类C构造函数C:类A构造函数、类B构造函数、类C构造函数D:类A构造函数、类C构造函数、类B构造函数

答案:类A构造函数、类B构造函数、类C构造函数基类中的公有和保护成员在公有派生类中将成为()。

A:仍然相应保持为公有成员和保护成员B:全部变成公有成员C:全部变成私有成员D:全部变成保护成员

答案:仍然相应保持为公有成员和保护成员C++的继承性允许派生类继承基类的()。

A:所有特性,但不允许增加新的特性或重定义基类的特性B:部分特性,但不允许增加新的特性或重定义基类的特性C:部分特性,并允许增加新的特性或重定义基类的特性D:所有特性,并允许增加新的特性或重定义基类的特性

答案:所有特性,并允许增加新的特性或重定义基类的特性重复继承关系中,若公共基类被声明为其直接派生类的(),则能保证后代派生类中只保留一份该公共基类的成员。

A:公有继承B:私有继承C:虚基类D:子对象

答案:虚基类公有继承方式下,类A是类B的虚基类,则类B声明的正确形式是()

A:classA:virtualpublicBB:classB:virtualpublicAC:classA:virtualpublicclassBD:classB:virtualpublicclassA

答案:classB:virtualpublicA

第六章单元测试

在继承关系中,下列函数中能被派生类继承的是()。

A:基类的析构函数B:基类成员运算符重载函数C:基类的友元函数D:基类的构造函数

答案:基类成员运算符重载函数下列函数中可以声明为虚函数的是()

A:析构函数B:友元函数C:构造函数D:静态成员函数

答案:析构函数下列函数中,不具有自身类隐含指针this的是()

A:构造函数B:静态成员函数C:虚函数D:析构函数

答案:静态成员函数下列有关继承关系中虚函数,描述正确的是()

A:函数名相同、参数不相同、返回值类型不相同B:函数名相同、参数相同、返回值类型不相同C:函数名相同、参数相同、返回值类型相同D:函数名相同、参数不相同、返回值类型相同

答案:函数名相同、参数相同、返回值类型相同下列对虚函数的访问方式中,能够在运行时动态绑定具体类的虚函数,从而实现类的多态性的是()

A:基类指针->虚函数B:基类对象.虚函数C:派生类指针->虚函数D:派生类对象.虚函数

答案:基类指针->虚函数下面有关抽象类描述错误的是()

A:抽象类中可以包含数据成员以及构造函数和析构函数B:抽象类是包含有纯虚函数的类C:抽象类可以创建对象D:抽象类的派生类可以创建对象的必要条件是实现了所有的纯虚函数

答案:抽象类可以创建对象派生类中重新定义虚函数时,不能与基类中的虚函数保持一致的是()

A:函数名B:函数参数C:函数体D:函数返回值类型

答案:函数体基类中的虚函数,在派生类中()

A:若不重新定义,则不再是虚函数B:无需重新定义C:若重新定义,必须加virtual声明才能成为虚函数D:无论是否重新定义,都默认为虚函数

答案:无论是否重新定义,都默认为虚函数下面程序的运行结果是()

classB1{public:

virtualvoidshow()

{cout<<"B1::show()"<<";";

}};classB2{public:

voidshow()

{cout<<"B2::show()"<<";";

}};classD:publicB1,publicB2{public:

voidshow()

{cout<<"D::show()"<<";";

}};intmain(){B1b1;

B2b2;

Dd;

b1.show();

b2.show();

d.show();

return0;}

A:B1::show();B2::show();B2::show();B:B1::show();B1::show();B1::show();C:B1::show();B2::show();D::show();D:B1::show();B2::show();B1::show();

答案:B1::show();B2::show();D::show();下面程序的运行结果是(

)classB1{public:

virtualvoidshow()

{cout<<"B1::show()"<<";";

}};classB2{public:

voidshow()

{cout<<"B2::show()"<<";";

}};classD:publicB1,publicB2{public:

voidshow()

{cout<<"D::show()"<<";";

}};intmain(){B1b1;

B2b2;

Dd;

B1*bp;

bp=&d;

bp->show();

return0;}

A:B2::show();B:D::show();C:B1::show();D:都不是

答案:D::show();

第七章单元测试

下列关于类模板说法正确的是()

A:类模板就是抽象类B:类模板中的成员函数具有相同的返回值类型C:类模板实例化时,编译器将根据给出的模板实参生成具体的类D:类模板中的数据成员具有相同的类型

答案:类模板实例化时,编译器将根据给出的模板实参生成具体的类下列关于类模板定义中的类型参数说法正确的是()

A:只可作为数据成员的类型B:三者皆可C:只可作为成员函数的返回类型D:只可作为成员函数的参数类型

答案:三者皆可有如下类模板声明:template<typenameT>classTanyTemp{public:

TanyTemp(Tx1,Ty1)

{x=x1;y=y1;}

private:

Tx,y;};则执行语句TanyTemp<int>iobject(23,32);生成的模板类为()

A:TanyTempB:TanyTemp<int>C:iobjectD:iobject(23,32)

答案:TanyTemp<int>有下面程序片段:

floatarr[]={3.1,6.2,9.3,8.4,0.5,4.7,2.8,1.9};

intn1=sizeof(arr)/sizeof(float);

charstr[]="bacdef";

intn2=sizeof(str)/sizeof(char);

假定采用函数模板设计统一的排序函数sortData,使得函数调用sortData(arr,n1)和sortData(str,n2)能够分别完成对数组arr以及数组str按元素数值(或ASCII码)从小到大的排序,则函数模板SortData中类型参数的个数至少应为()

A:1B:2C:3D:0

答案:1C++使用模板可以减少重复劳动,提高代码重用率()

A:对B:错

答案:对声明函数模板时,template<typename类型参数>与函数定义不能分开,两者之间不能插入其它任何语句。()

A:对B:错

答案:对一个函数模板只能生成一个模板函数。()

A:对B:错

答案:错类模板可以生成若干个模板类,每个模板类又可定义若干个对象。()

A:错B:对

答案:对C++语言中模板分为函数模板和类模板两种。()

A:错B:对

答案:对所有模板声明都是以template<typename类型参数>开头,其中关键字typename也可换为关键字class。()

A:错B:对

答案:对

第八章单元测试

标准流对象cin、cout、cerr和clog中,用于与标准输入设备(键盘)连接的是()

A:ceerB:coutC:cinD:clog

答案:cin有下面程序片段:

stringss;

getline(cin,ss);

cout<<ss;

当输入HelloVisualStudio!↙时,输出的内容为()

A:HelloB:HelloVisualStudio!C:HelloVisualD:HelloVisualStudio

答案:HelloVisualC++中,打开文件就是将这个文件与一个()建立关系,关闭文件就是取消这种关联。

A:流对象B:指针C:结构体D:常量

答案:流对象

当输入HelloVisualStudio!↙时,输出的内容为()

A:HelloVisB:HelloC:HelloVisuD:HelloVisualStudio!

答案:HelloVis要求以二进制方式打开输出文件file.dat,该文件位于D盘根目录下(D:\file.dat),下列打开方式正确的是()

A:ofstreamoutfile("D:\file.dat",ios::binary);B:ofstreamoutfile("D:\\file.dat",ios::binary);C:ifstreaminfile("D:\file.dat");D:ifstreaminfile("D:\\file.dat");

答案:ofstreamoutfile("D:\\file.dat",ios::binary);下列关于ostream类成员函数ostream&write(char*buffer,intcount);描述正确的是()

A:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论