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:&xxC:xxD:&3.14

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

stringstr("HelloC++");

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

则程序的输出结果是()

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

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

stringstr("HelloC++");

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

则程序的输出结果是()

A:HelloC++WorldB:HelloC+World+C:HelloWorldC++D:编译报错无法运行

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

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

答案:B编译系统区分重载函数的依据是()。

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

答案:BD若函数的返回值为引用类型,则该函数的调用表达式可以作为赋值运算的左值。()

A:对B:错

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

A:对B:错

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

A:对B:错

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

A:对B:错

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

A:错B:对

答案:A

第二章测试

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

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

答案:D有如下类定义:

classSample{

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

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

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

答案:D有如下程序片段:

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:Sobj->setValue(5)D:ptr.setValue(5)

答案:AB有如下程序片段:

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:①

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

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

答案:B有如下类定义:

classTEST{

inta;public:intGetRef()const

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

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

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

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

()

A:对B:错

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

A:错B:对

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

A:对B:错

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

A:对B:错

答案:A

第三章测试

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

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

答案:A下列关于常成员的叙述正确的是()。

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

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

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

答案:C有如下类声明:

classSample{

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

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

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

答案:A下面程序中横线部分应填入的内容是(

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

count=0;

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

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

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

答案: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:10B:20C:40D:30

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

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

答案:A下列关于数据共享在类中描述正确的是()。

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

答案:AC下列函数中具有当前类的隐含指针this的是()。

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

答案:CD

第四章测试

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

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

答案:C下列运算符中不能重载的是()

A:newB:deleteC:!D:sizeof

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

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

答案:B假定复数类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:X.operator+(Y);

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

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

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

X.operator*(Z);

答案:A假定复数类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:operator*(X.operator+(Y),Z);C:X.operator+(operator*(Y,Z));D:(operator+(X,Y)).operator*(Z);

答案:C下列关于类成员运算符重载和友元运算符重载说法正确的是()

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

答案:A假定类TEST中重载运算符<<,则运算符<<在类TEST中正确的声明形式为()

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

答案:D假定类Sample中重载运算符>>,则运算符>>在类Sample中正确的声明形式为()

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

答案:B下标运算符[]在类中既可以重载为友元也可以重载为类成员。()

A:对B:错

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

A:对B:错

答案:A

第五章测试

有以下程序片段: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:①②③

答案:C有以下程序片段: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:①

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

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

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

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

答案:AB具有虚基类的派生类在创建对象时,最先被调用的是()。

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

答案:A有以下程序片段: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:类B构造函数、类A构造函数、类C构造函数B:类C构造函数、类B构造函数、类A构造函数C:类A构造函数、类C构造函数、类B构造函数D:类A构造函数、类B构造函数、类C构造函数

答案:D基类中的公有和保护成员在公有派生类中将成为()。

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

答案:AC++的继承性允许派生类继承基类的()。

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

答案:C重复继承关系中,若公共基类被声明为其直接派生类的(),则能保证后代派生类中只保留一份该公共基类的成员。

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

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

A:classB:virtualpublicAB:classA:virtualpublicBC:classA:virtualpublicclassBD:classB:virtualpublicclassA

答案:A

第六章测试

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

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

答案:B下列函数中可以声明为虚函数的是()

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

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

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

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

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

答案:B下列对虚函数的访问方式中,能够在运行时动态绑定具体类的虚函数,从而实现类的多态性的是()

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

答案:B下面有关抽象类描述错误的是()

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

答案:A派生类中重新定义虚函数时,不能与基类中的虚函数保持一致的是()

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

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

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

答案:A下面程序的运行结果是()

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();B1::show();B:B1::show();B2::show();B2::show();C:B1::show();B2::show();D::show();D:B1::show();B1::show();B1::show();

答案:C下面程序的运行结果是(

)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:B1::show();C:D::show();D:都不是

答案:C

第七章测试

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

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

答案:D下列关于类模板定义中的类型参数说法正确的是()

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

答案:D有如下类模板声明:template<typenameT>classTanyTemp{public:

TanyTemp(Tx1,Ty1)

{x=x1;y=y1;}

private:

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

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

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

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:2B:3C:0D:1

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

A:错B:对

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

A:对B:错

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

A:错B:对

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

A:错B:对

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

A:错B:对

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

A:错B:对

答案:B

第八章测试

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

A:ceerB:clogC:coutD:cin

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

stringss;

getline(cin,ss);

cout<<ss;

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

A:HelloVisualStudioB:HelloVisualStudio!C:HelloD:HelloVisual

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

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

答案:A

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

A:HelloVisuB:HelloC:HelloVisD:HelloVisualStudio!

答案:C要求以二进制方式打开输出文件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");

答案:B下列关于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

提交评论