国家二级C++机试(类和对象)模拟试卷1(共212题)_第1页
国家二级C++机试(类和对象)模拟试卷1(共212题)_第2页
国家二级C++机试(类和对象)模拟试卷1(共212题)_第3页
国家二级C++机试(类和对象)模拟试卷1(共212题)_第4页
国家二级C++机试(类和对象)模拟试卷1(共212题)_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C++机试(类和对象)模拟试卷1(共9套)(共212题)国家二级C++机试(类和对象)模拟试卷第1套一、选择题(本题共26题,每题1.0分,共26分。)1、有如下类定义:classFoo{public:Foo(intv):value(v){}//①Foo(){}∥②private:F00(){}∥③intvalue=0;//④};其中存在语法错误的行是()。A、①B、②C、③D、④标准答案:D知识点解析:此题考查的是类的定义。C++语言规定,在类体内不允许对所定义的数据成员进行初始化。2、以下关键字不能用来声明类的访问权限的是()。A、publicB、staticC、protectedD、private标准答案:B知识点解析:此题考查的是类的访问权限。在C++语言中,类的访问权限有公有、保护和私有三种。故本题选B。3、下列有关类成员的叙述中,正确的是()。A、友元函数是类的成员函数B、类成员的默认访问权限是私有的C、类成员函数必须声明为公有的D、类的静态数据成员不能是常成员标准答案:B知识点解析:此题考查的是类成员的有关概念。类的友元函数可以直接访问该类的所有成员,但它不是类的成员函数,故选项A.错误;类成员函数的访问权限可以声明为公有、保护、私有,故选项C错误:静态数据成员的声明是使用关键字static,它可以是常成员,故选项D错误。4、有如下两个类定义:classAA{};classBB{AAv1,*v2;BBv3;int*v4;}其中有一个成员变量的定义是错误的,这个变量是()。A、v1B、v2C、v3D、v4标准答案:C知识点解析:在定义类的数据成员时,类中的数据成员可以是任意类型,包括整型、浮点型、字符符型、数组、指针和引用等,也可以是对象。但是要注意,只有另外一个类的对象,才可以作为该类的成员,即作为类的成员对象存在。自身类的对象是不可以作为自身类的成员存在,但自身类的指针可以。对于本题,在定义类BB时,不能包括其对象v3。5、有如下类定义:classMyClass{intb;chara;doublec;public:MyClass():c(0.0),b(0),a(’,’){}};创建这个类的对象时,数据成员的初始化顺序是()。A、a,b,CB、c,b,aC、b,a,CD、c,a,b标准答案:C知识点解析:类的成员初始化顺序与成员变量在构造函数中的位置先后顺序无关,只与成员变量在类中定义的先后顺序有关。6、下列关于对象初始化的叙述中,正确的是()。A、定义对象的时候不能对对象进行初始化B、定义对象之后可以显式地调用构造函数进行初始化C、定义对象时将自动调用构造函数进行初始化D、在一个类中必须显式地定义构造函数实现初始化标准答案:C知识点解析:建立对象时根据给定的参数调用相应的构造函数对对象进行初始化。无参数时表示调用缺省构造函数。构造函数在对象被创建时由系统自动调用。7、有如下程序:#include<iostream>usingnamespacestd;classPoint{public:staticintnumber;public:Pointo{number++;}~Point(){number--;}};intPoint::number--0:voidmainO{Point*ptr;PointA,B:{Point*ptr_point=newPoint[3];ptx=ptr_point;}PointC;Gout+Point:number+endl;delete[]ptr;}运行时输出的结果是()。A、3B、4C、6D、7标准答案:C知识点解析:此题是静态成员、对象的构造和对象的生存期等知识点的综合考查。此题定义了一个静态成员变量number,初始值为0。主函数中第2行定义了2个Point对象,此时number变为2;随后new运算符又定义了一个包含3个Point对象元素的数组,其通过delete结束后number的值变为5;然后又定义了一个Point对象C,number变为6;最后输出number的内容。8、下列情况中,不会调用拷贝构造函数的是()。A、用一个对象去初始化同一类的另一个新对象时B、将类的一个对象赋值给该类的另一个对象时C、函数的形参是类的对象,调用函数进行形参和实参结合时D、函数的返回值是类的对象,函数执行返回调用时标准答案:B知识点解析:此题考查的是复制构造函数的概念。用一个已知的对象初始化一个正在创建的同类对象时,就会发生复制构造函数。因此,选项A、C、D均会调用复制构造函数,而只有选项B没有创建的动作,不调用复制构造函数。9、对于一个类定义,下列叙述中错误的是()。A、如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B、如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数C、如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D、如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数标准答案:B知识点解析:此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。10、有如下类定义:classMyClass{Intvalue;public;MyClass(intn):value(n){}intgerValue()const{returnvalue;}};则类MyClass的构造函数的个数是()。A、1个B、2个C、3个D、4个标准答案:A知识点解析:此题考查的是构造函数的概念。构造函数的名字必须与类名相同;构造函数不指定返回值类型;构造函数可以重载;在创建对象时,系统会自动调用构造函数。11、有如下程序:#include<iOstream>usingnamespacestd;classMyClass{public:MyClass(inti=0){cout<<1;}MyClass(constMyClass&x){cout<<2;}MyClass&operator=(constMyClass&x){cout<<3;return*this;}~MyClass(){cout<<4;}};intmain(){MyClassobj1(1),obj2(2),obj3(obj1);return0:}运行时的输出结果是()。A、112444B、11114444C、121444D、11314444标准答案:A知识点解析:当创建MyClass类对象obj1(1)和obj2(2)时候,调用类构造函数会输出两个1,然后创建类对象obj3(obj(1))时,会调用拷贝类构造函数,输出一个2。然后当main函数结束时候,调用三个对象的析构函数会输出三个4。12、Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是()。Samplea[2],*P=newSample;A、0B、1C、2D、3标准答案:D知识点解析:在C++中,声明一个类对象时,编译程序需要调用类的构造函数为对象分配存储空间,进行必须的初始化。在本题的这条语句中,声明了一个Sample类型的包含2个数组元素的数组a[2],一个指向类Sample对象的指针P,所以Sample类的构造函数共调用了3次。13、有如下程序#include<iostream>usingnamespacestd;classTest{public:Test(){}Test(constTest&t){cout<<1;}};Testfun(Test&u){Testt=u;returnt;}intmain(){Testx,y;x=fun(y);return0;}运行这个程序的输出结果是()。A、无输出B、1C、11D、111标准答案:C知识点解析:在类Test中定义拷贝构造函数Test(constTest&t),其函数体为输出1,在主函数main中,当执行语句x=fun(y),调用拷贝函数用对象y的值构造对象u,输出1,在执行函数fun()的return语句时,调用拷贝函数构造匿名对象,输出1。14、有如下程序:#include<iostream>usingnamespacestd;classXA{inta;public:staticintb;XA(intaa):a(aa){b++;}~XA(){}intget(){returna;}};intXA::b=0;intmain()XAd1(2),d2(3);cout<<d1.get()+d2.get()+XA::b<<endl;return0;}运行时的输出结果是()。A、5B、6C、7D、8标准答案:C知识点解析:执行XA类的实例变量d1(2)时,成员函数d1.get()的返回值等于2,XA.b的值等于1,执行XA类的实例变量d2(3)时,成员函数d1.get()的返回值等于3,XA.b的值等于2,所以输出结果为2+3+2=7。15、若PAT是一个类,则程序运行时,语句“PAT{*ad}[3];”调用PAT的构造函数的次数是()。A、0B、1C、2D、3标准答案:A知识点解析:语句“PAT(*ad)[3]”定义了含有3个元素的指向类PAT类型的指针数组ad。16、下列关于类成员对象构造函数调用顺序的叙述中,正确的是()。A、与它们在初始化列表中的顺序相同B、与它们在类中声明的顺序相同C、与析构函数的调用顺序相同D、顺序不确定标准答案:B知识点解析:类成员对象构造函数的调用是按照在类中定义的顺序进行的,而不是按照构造函数说明后的冒号顺序进行构造的。17、有如下头文件:intf1();staticintf2();classMA{public:intf3();staticintf4();};在所描述的函数中,具有隐含的this指针的是()。A、f1B、f2C、f3D、f4标准答案:C知识点解析:此题考查的是this指针。this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。题目电,只有f3()满足“类的非静态成员函数”的要求,故应选C选项。18、有如下程序:#include<iostream>usingnamespacestd;classTest{public:Test(){n+=2;}~Test0{n-=3;},staticintgetNum(){returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;deletep;cout<<"n="<<Test::getNum()<<endl;return0;}执行后的输出结果是()。A、n=0B、n=1C、n=2D、n=3标准答案:A知识点解析:此题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员n的运算具有叠加性,执行“n+=2”和“n-=3”后n的值为0。19、有如下类定义:classPoint{private;staticinthow_many;};_________how_many=0;要初始化Point类的静态成员how_many,下划线处应填入的内容是()。A、ingB、staticintC、intPoint::D、staticintPoint::标准答案:C知识点解析:此题考查的是静态数据成员的初始化。静态数据成员应在类体外进行初始化,且初始化的一般格式为:数据类型类名::静态数据成员名=初始值。20、有如下类定义:classSample{public;Sample(intx):ref(x){}//①private:Sample():ref(0){}//②staticintval=5;//③constintref;//④};上述程序段中,错误的语句是()。A、①B、②C、③D、④标准答案:C知识点解析:静态整型数据不能定义为类的数据成员。21、由于常对象不能被更新,因此()。A、通过常对象只能调用它的常成员函数B、通过常对象只能调用静态成员函数C、常对象的成员都是常成员D、通过常对象可以调用任何不改变对象值的成员函数标准答案:A知识点解析:此题考查的是常对象与常成员函数的概念。使用const关键字修饰的对象称为常对象,它不能被更新,所以常对象只能调用常成员函数而不能调用其它成员函数:使用const关键字声明的成员函数是常成员函数,它也不能被更新,常成员函数只能调用常成员函数而不能调用其它函数。22、有如下程序:#include<iostream>usingnamespacestd;classMyClass{public:MyClass(intx):val(x){}voidSet(intx){Val=x;}voidPrint()const{cout<<"val="<<Val<<’\t’;}private:intval;};intmain(){constMyClassobj1(10);MyClassobj2(20);obj1.Print();//语句1obj2.Print();//语句2obj1.Set(20);//语句3obj2.Set(30);//语句4return0;}其主函数中错误的语句是()。A、语句1B、语句2C、语句3D、语句4标准答案:C知识点解析:在创建类对象obj1(10)时,前面有关键字const,所以当语句3调用obi1的成员函数试图修改其私有成员的数值的时候,会编译出错。23、有如下程序:#include<iostream>usingnamespacestd;classA{public:A(inti=0):r1(i){}voidprint(){cout<<’E’<<r1<<’-’;}voidprint()const{cout<<’C’<<r1*r1<<’-’;}voidprint(intx){cout<<’p’<<r1*r1*r1<<’_’;}private:intr1;};intmain(){Aa1;constAa2(4);a1.print(2);a2.print();return0;}运行时的输出结果是()。A、P8-E4B、P8-C16-C、P0-E4-D、P0-C16-标准答案:D知识点解析:在主函数中创建a1对象时,调用类A的默认构造函数,其数据成员r1的值等于0。当执行a1.print(2)语句时,调用带参数的print成员函数,所以输出结果为p0-,对象a2为常成员,所以其成员变量r1的值等于4,因为常对象只能调用常成员函数,所以当执行语句a2.print()语句时,输出结果为C14-。24、已知函数print()没有返回值,如果在类中将之声明为常成员函数,正确的是()。A、voidprint()const;B、constvoidprint();C、voidconstprint();D、voidprint(const);标准答案:A知识点解析:eonst成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,把const关键字放在函数的参数表和函数体之间。25、有如下程序:#include<iostream>usingnamespacestd;classSample{friendlong>>fun(Samples);public:Sample(longa){x==a;}private:};longfun(Samples){if(s.x<2)return1:returns.X*fun(Sample(s.x-1)):}intmain(){intsum=0;for(inti=0;i<6;i++){sum+=fun(Sample(i));}return0;}运行时输出的结果是()。A、120B、16C、154D、34标准答案:C知识点解析:此题考查的是友元函数和递归函数。因为fun函数是Sample类的友元函数,所以fun函数可以直接访问Sample类对象的私有成员x。主函数调用fun函数,构造参数为0~5。当n小于2时,fun函数返回1,其余返回值为n*fun(n-1)。n取0~5的值时fun(n)依次为1,1,2,6,24,120,累加结果为154。26、已知类MyClass声明如下:classMyClass{intn;public:MyClass(intk):n(k){}intgetValue()const{returnn;}};在下列数组定义中正确的是()。A、MyClassx1[2];B、MyClassx2[2]={newMyClass(1),newMyClass(2)};C、MyClass*x3[2];D、MyClass*x4[2]={MyClass(1),MyClass(2)};标准答案:C知识点解析:考查的是对象数组。选项A中在建立对象数组时也同样需要调用构造函数:选项B和D的类型不匹配,B中不能将指针传给非指针,D中是将非指针传给指针。国家二级C++机试(类和对象)模拟试卷第2套一、选择题(本题共24题,每题1.0分,共24分。)1、有如下类定义:classFoo{public:Foo(intv):value(v){}//①~Foo(){}//②private:Foo(){}//③intvalue=0;//④};其中存在语法错误的行是()。A、①B、②C、③D、④标准答案:D知识点解析:此题考查的是类的定义。C++语言规定,在类体内不允许对所定义的数据成员进行初始化。2、以下关键字不能用来声明类的访问权限的是()。A、publicB、staticC、protectedD、private标准答案:B知识点解析:此题考查的是类的访问权限。在C++语言中,类的访问权限有公有、保护和私有三种。故本题选B。3、下列有关类成员的叙述中,正确的是()。A、友元函数是类的成员函数B、类成员的默认访问权限是私有的C、类成员函数必须声明为公有的D、类的静态数据成员不能是常成员标准答案:B知识点解析:此题考查的是类成员的有关概念。类的友元函数可以直接访问该类的所有成员,但它不是类的成员函数,故选项A错误;类成员函数的访问权限可以声明为公有、保护、私有,故选项C错误;静态数据成员的声明是使用关键字static。它可以是常成员,故选项D错误。4、有如下两个类定义:classAA{};classBB{AAv1,*v2;BBv3:int*v4;};其中有一个成员变量的定义是错误的,这个变量是()。A、vlB、v2C、v3D、v4标准答案:C知识点解析:在定义类的数据成员时,类中的数据成员可以是任意类型,包括整型、浮点型、字符符型、数组、指针和引用等,也可以是对象。但是要注意,只有另外一个类的对象,才可以作为该类的成员,即作为类的成员对象存在。自身类的对象是不可以作为自身类的成员存在,但自身类的指针可以。对于本题,在定义类BB时,不能包括其对象v3。5、建立一个类对象时,系统自动调用()。A、析构函数B、构造函数C、静态函数D、友元函数标准答案:B知识点解析:建立一个类的对象时,编译程序需要为对象分配存储空间,进行必要的初始化。在c++中,这项工作是由构造函数来完成。6、有如下程序:#includeusingnamespacestd;classPoint{public:staticintnumber;public:Pointo{number++;}~Point(){number--;}};intPoint::number--0:voidmain(){Point*ptr;PointA,B;{Point*ptr_point=newPoint[3];ptx=ptr_point;}PointC:Gout+Point::number+endl;delete[]ptr;}运行时输出的结果是()。A、3B、4C、6D、7标准答案:C知识点解析:此题是静态成员、对象的构造和对象的生存期等知识点的综合考查。此题定义了一个静态成员变量number,初始值为0。主函数中第2行定义了2个Point对象,此时number变为2;随后new运算符又定义了一个包含3个Point对象元素的数组,其通过delete结束后number的值变为5;然后又定义了一个Point对象C,number变为6;最后输出number的内容。7、下列情况中,不会调用拷贝构造函数的是()。A、用一个对象去初始化同一类的另一个新对象时B、将类的一个对象赋值给该类的另一个对象时C、函数的形参是类的对象,调用函数进行形参和实参结合时D、函数的返回值是类的对象,函数执行返回调用时标准答案:B知识点解析:此题考查的是复制构造函数的概念。用一个已知的对象初始化一个正在创建的同类对象时,就会发生复制构造函数。因此,选项A、C、D均会调用复制构造函数,而只有选项B没有创建的动作,不调用复制构造函数。8、对于一个类定义,下列叙述中错误的是()。A、如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B、如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数C、如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D、如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数标准答案:B知识点解析:此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。9、有如下类定义:classMyClass{Intvalue;public;MyClass(intn):value(n){)intgerValue()const{returnvalue;}};则类MyClass的构造函数的个数是()。A、1个B、2个C、3个D、4个标准答案:A知识点解析:此题考查的是构造函数的概念。构造函数的名字必须与类名相同;构造函数不指定返回值类型;构造函数可以重载:在创建对象时,系统会自动调用构造函数。10、有如下程序:#includeusingnamespacestd:classMyClass{public:MyClass(inti=0){tout<<1;}MyClass(constMyClass&x){cout<<2;}MyClass&operator=(constMyClass&x){cout<<3;return*this;}~MyClass(){cout<<4;}};intmain(){MyClassobj1(1),obj2(2),obj3(obj1);return0:)运行时的输出结果是()。A、112444B、11114444C、121444D、11314444标准答案:A知识点解析:当创建MyClass类对象obj1(1)和obj2(2)时候,调用类构造函数会输出两个1,然后创建类对象obj3(obj(1))时,会调用拷贝类构造函数,输出一个2,然后当main函数结束时候,调用三个对象的析构函数会输出三个4。11、Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是()。Samplea[2],*P=newSample;A、0B、1C、2D、3标准答案:D知识点解析:在C++中,声明一个类对象时,编译程序需要调用类的构造函数为对象分配存储空间,进行必须的初始化。在本题的这条语句中,声明了一个Sample类型的包含2个数组元素的数组a[2],一个指向类Sample对象的指针P,所以Sample类的构造函数共调用了3次。12、有如下程序#includeusingnamespacestd;classTest{public:Test(){)Test(constTest&t){cout<<1;}};Testfun(Test&u){Testt=u;returnt;}intmain(){Testx,y;x=fun(y);return0;}运行这个程序的输出结果是()。A、无输出B、1C、11D、111标准答案:C知识点解析:在类Test中定义拷贝构造函数Test(constTest&t),其函数体为输出1,在主函数main中,当执行语句x=fun(y),调用拷贝函数用对象y的值构造对象u,输出1,在执行函数fun()的return语句时,调用拷贝函数构造匿名对象,输出1。13、有如下程序:#includeusingnamespacestd;classXA{inta;public:staticintb;XA(intaa):a(aa){b++;}~XA(){}intget(){returna;)};hatXA::b=0;intmain(){XAd1(2),d2(3);cout<A、5B、6C、7D、8标准答案:C知识点解析:执行XA类的实例变量d1(2)时,成员函数d1.get()的返回值等于2,XA.b的值等于1,执行XA类的实例变量d2(3)时,成员函数d1.get()的返回值等于3,XA.b的值等于2,所以输出结果为2+3+2=7。14、下列关于类成员对象构造函数调用顺序的叙述中,正确的是()。A、与它们在初始化列表中的顺序相同B、与它们在类中声明的顺序相同C、与析构函数的调用顺序相同D、顺序不确定标准答案:B知识点解析:类成员对象构造函数的调用是按照在类中定义的顺序进行的,而不是按照构造函数说明后的冒号顺序进行构造的。15、有如下头文件:intfl();staticintf2();classMA{public:intf3();staticintf();};在所描述的函数中,具有隐含的this指针的是()。A、f1B、f2C、f3D、f4标准答案:C知识点解析:此题考查的是this指针。this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。题目中,只有f3()满足“类的非静态成员函数”的要求,故应选C选项。16、有如下程序:#includeusingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n-=3;}staticintgetNum(){returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;deletep;cout<<”n=”<A、n=0B、n=1C、n=2D、n=3标准答案:A知识点解析:此题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员n的运算具有叠加性,执行“n+=2”和“n-=3”后n的值为0。17、有如下类定义:classPoint{private;staticinthow_many;};________how_many=0;要初始化Point类的静态成员howmany,下划线处应填入的内容是()。A、ingB、staticintC、intPoint::D、staticintPoint::标准答案:C知识点解析:此题考查的是静态数据成员的初始化。静态数据成员应在类体外进行初始化,且初始化的一般格式为:数据类型类名::静态数据成员名=初始值。18、有如下类定义:classSample{public;Sample(intx):ref(x){}//①private:Sample():ref(0){}//②staticintval=5;//③constintref;//④};上述程序段中,错误的语句是()。A、①B、②C、③D、④标准答案:C知识点解析:静态整型数据不能定义为类的数据成员。19、由于常对象不能被更新,因此()。A、通过常对象只能调用它的常成员函数B、通过常对象只能调用静态成员函数C、常对象的成员都是常成员D、通过常对象可以调用任何不改变对象值的成员函数标准答案:A知识点解析:此题考查的是常对象与常成员函数的概念。使用const关键字修饰的对象称为常对象,它不能被更新,所以常对象只能调用常成员函数而不能调用其它成员函数;使用const关键字声明的成员函数是常成员函数,它也不能被更新,常成员函数只能调用常成员函数而不能调用其它函数。20、有如下程序:#includeusingnamespacestd;classMyClass{public:MyClass(intx):Val(x){}voidSet(intx){val=x;}voidPrint()const{cout<<"val="<A、语句1B、语句2C、语句3D、语句4标准答案:C知识点解析:在创建类对象obj1(10)时,前面有关键字const,所以当语句3调用obj1的成员函数试图修改其私有成员的数值的时候,会编译出错。21、有如下程序:#includeusingnamespacestd;classA{public:A(inti=0):r1(i){}voidprint(){cout<<ˊEˊ<A、P8-E4B、P8-C16-C、P0-E4-D、P0-C16-标准答案:D知识点解析:在主函数中创建a1对象时,调用类A的默认构造函数,数据成员r1的值等于0。当执行a1.print(2)语句时,调用带参数的print成员函数,所以输出结果为p0-,对象a2为常成员,所以其成员变量r1的值等于4,因为常对象只能调用常成员函数,所以当执行语句a2.print()语句时,输出结果为C14-。22、已知函数print()没有返回值,如果在类中将之声明为常成员函数,正确的是()。A、voidprint()const;B、constvoidprint();C、voidconstprint();D、voidprint(const);标准答案:A知识点解析:const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,把const关键字放在函数的参数表和函数体之间。23、有如下程序:#includeusingnamespacestd;classSample{friendlongfun(Samples);public:Sample(longa){x=a;}private:longx;};longfun(SampleS){if(s.x<2)return1:returns.x*fun(Sample(s.x-1)):}intmain(){intsum=0;for(inti=0;i<6;i++){sum+=fun(Sample(i));}cout<A、120B、16C、154D、34标准答案:C知识点解析:此题考查的是友元函数和递归函数。因为fun函数是Sample类的友元函数,所以fun函数可以直接访问Sample类对象的私有成员x。主函数调用fun函数,构造参数为0~5。当n小于2时,fun函数返回1,其余返回值为n*fun(n-1)。n取0~5的值时fun(n)依次为1,1,2,6,24,120,累加结果为154。24、己知类MyClass声明如下:classMyClass{intn;public:MyClass(intk):n(k){}intgetValue()const{returnn;}};在下列数组定义中正确的是()。A、MyClassx1[2];B、MyClassx2[2]={newMyClass(1),newMyClass(2)};C、MyClass*x3[2];D、MyClass*x4[2]={MyClass(1),MyClass(2)};标准答案:C知识点解析:考查的是对象数组。选项A中在建立对象数组时也同样需要调用构造函数:选项B和D的类型不匹配,B中不能将指针传给非指针,D中是将非指针传给指针。国家二级C++机试(类和对象)模拟试卷第3套一、选择题(本题共22题,每题1.0分,共22分。)1、下列关于this指针的描述中,正确的是()。A、类的成员函数都有this指针B、类的友元函数都有this指针C、任何与类相关的函数都有this指针D、类的非静态成员函数都有this指针标准答案:D知识点解析:this是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针可以知道自己属于哪一个对象,它隐藏于每个类的非静态成员函数中。2、有如下程序:#include<iostream>usingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n-=3;}staticintgetNum0{returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=new"rest;deletep;tout<<’’n=’’<<Test::getNum()<<end1;return0;}执行后的输出结果是()。A、n=0B、n=1C、n=2D、n=3标准答案:A知识点解析:此题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员n的运算具有叠加性,执行“n+=2”和“n-=3”后n的值为0。3、有如下程序:#include<iostream>usingnamespacestd;classObj{staticinti;public:Obj(){i++;}~Obj(){i--;}statichatgetVal(){returni;}};intObj::i=0;voidf(){Objob2;cout<<ob2.getVal();}intmain(){Objob1;f();Obj*ob3=newObj;cout<<ob3->getValq();deleteob3;cout<<Obj::getVal();return0;}程序的输出结果是()。A、232B、231C、222D、221标准答案:D知识点解析:此题考查的是静态成员。本题中,Obj类定义了一个静态数据成员i,并初始化为0在主函数中,首先定义了1个该类对象ob1,所以构造函数被调用1次,i加1;然后调用函数f(),该函数中又定义了一个对象ob2,此时i再次加1变为2,然后通过函数getVal()揄出i的值2。f()函数结束,ob2变量被释放,故析构函数被调用了1次,i变成1;回到主函数中,又动态创建了1个对象并让ob3指向它,此后i变成2并输出。最后释放动态创建的对象i变为1,输出1。故最终的输出结果是221。4、有如下程序:#include<iostream>usingnamespacestd;classMyClass{public:MyClass(){++count;}~MyClass(){--count;}staticintgetCount(){returncount;}private:staticintcount;};intMyClass::count=0;intmain(){MyClassobj;cout<<obj.getCount();MyClass*ptr=newMyClass;cout<<MyClass::getCount();deleteptr;cout<<MyClass::getCount();return0;}程序的输出结果是()。A、121B、232C、221D、122标准答案:A知识点解析:此题考查的是静态成员。静态成员的特性是不管这个类创建了多少对象,它的静态成员都只有一个拷贝副本,这个副本被所有属于这个类的对象共享。题目中,首先定义了obj对象,其构造函数使静态数据成员cout增1,故输出“1”;然后通过指针动态创建了Myclass类的对象,构造函数被再次调用,count变为2,输出“2”;接着删除创建的MyClass类的对象,调用析构函数,count减1变为1,输出“1”。故最终输出结果是121。5、有如下类定义:classPoint{private;staticinthow_many;};__how_many=0;要初始化Point类的静态成员how_many,下划线处应填入的内容是()。A、ingB、staticintC、intPoint::D、staticintPoint::标准答案:C知识点解析:此题考查的是静态数据成员的初始化。静态数据成员应在类体外进行初始化,且初始化的一般格式为:数据类型类名::静态数据成员名=初始值。6、有如下类和对象的定义:classConstants{public;staticdoublegetPl(){return3.1416;}};Constantsconstants;下列各组语句中,能输出3.1416的是()。A、cout<<constants->getPI();和cout<<Constants::gerPI();B、cout<<constants.getPI();和cout<<Constants.getPI();C、cout<<constants->getaI();和cout<<Constants->getPI();D、cout<<constants.getPI();和cout<<Constants::getPI();标准答案:D知识点解析:此题考查的是静态成员函数的引用。getPI()是类C0nstants的静态成员函数。引用静态成员函数可以有两种形式:一是通过类名直接进行调用,例如类名::静态成员函数名;另一种是用类的任何对象名进行调用其作用仅是通过对象名间接的指出类名,例如constants.getPI()选项D即是这种调用方式。7、若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为()。A、aB、AA.aC、a{}D、AA::a{}标准答案:A知识点解析:类AA的成员函数直接引用类AA的非静态数据成员。8、有如下类定义:classSample{public;Sample(intx):ref(x){}//①private:Sample():ref(0){}//②staticintval=5;//③constintref;//④};上述程序段中,错误的语句是()。A、①B、②C、③D、④标准答案:C知识点解析:静态整型数据不能定义为类的数据成员。9、已知类Myclass的定义如下classMyClass{public:voidfunction1(MyClass&c){cout<<c.data;}staticvoidfunction2(MyClass&c){cout<<c.data;}voidfunction3(){cout<<data;}staricvoidfunction4(){cout<<data;}private:intdata;};其中有编译错误的函数是()。A、function1B、function2C、function3D、functicIn4标准答案:D知识点解析:funcyion4()函数作为类的静态成员函数,不能直接访问类中说明的非静态成员,即cout<<data在编译时会出错。10、有如下程序:#include<iostream>usingnamespacestd;classXA{ima;public:staticintb;XA(intaa):a(aa){b++;}intgetA(){returna;}};intXA::b=0;intmain(){XAd1(4),d2(5);cout<<d1.getA()+d2.getA()+XA::b+d1.b<<end1;return0;}运行这个程序的输出结果是()。A、9B、11C、13D、15标准答案:C知识点解析:在类XA的构造函数中,定义了用成员变量a的值初始化变量aa,同时静态成员变量b值加1。所以当在主main函数中定义类xA的对象d1(4)后,变量b的等于1,定义对象d2(5)后,变量b的值等于2,所以表达式d1.getA()+d2.getA()::b+d1.b等于4+5+1+2+1=13。11、由于常对象不能被更新,因此()。A、通过常对象只能调用它的常成员函数B、通过常对象只能调用静态成员函数C、常对象的成员都是常成员D、通过常对象可以调用任何不改变对象值的成员函数标准答案:A知识点解析:此题考查的是常对象与常成员函数的概念。使用const关键字修饰的对象称为常对象,它不能被更新,所以常对象只能调用常成员函数而不能调用其它成员函数;使用const关键字声明的成员函数是常成员函数,它也不能被更新,常成员函数只能调用常成员函数而不能调用其它函数。12、有如下程序#include<iostream>usingnamespacestd;inti=1;classFun{public:staticinti;intvalue(){returni-1;}intvalue()const{returni+1;}};intFun::i=2;intmain(){inti=3;Funfun1;constFunfun2;return0;}若程序的输出结果是:123则程序中下划线处遗漏的语句是()。A、cout<<fun1.value()<<Fun::i<<fun2.value();B、cout<<Fun::i<<fun1.value()<<fun2.value();C、cout<<fun1.value()<D、cout<<fun2.value()<<Fun::i<<fun1.value();标准答案:A知识点解析:此题考查的是常成员函数。const关键字可以用于参与重载函数的区分,此时常对象调用常成员函数,一般对象调用一般成员函数,当类中只有一个常成员函数时,一般对象也可以调用该常成员函数。本题中,通过fun1调用value()函数时,是调用前一个,而通过fun2调用value()函数是调用后一个;另外,value()函数中访问的i是类中定义的数据成员i,全局变量i在类中被“屏蔽”。fun1.value()输出i-1=2-1=1;fun2.value()调用后一个value()函数输出i+1=2+1=3;Fun::i是通过类名直接访问类的静态数据成员i的值,即2;所以正确的输出顺序是A选项。13、有如下程序:#include<iostream>usingnamespacestd;classVAC{public;intf()const{return3;}intf(){return5;}};Intmain(){VACv1;constVACv2;cout<<v1.f()<<v2.f();fetum0;}运行时的输出结果是()。A、53B、35C、55D、33标准答案:A知识点解析:此题考查的是常成员函数的应用。VAC类中说明了两个函数,一个是常成员函数,一个是普通函数;在主函数中说明了两个对象,通过普通对象v1调用的是普通函数,输出5:通过常对象V2调用的是常成员函数,输出3。14、有如下程序:#include<iostream>usingnamespacestd;classMyClass{public:MyClass(intx):Val(x){}voidSet(intx){val=x;}voidPrint()const{cout<<’’val=’’<<val<<’\t’;}private:intval;};intmain(){constMyClassobj1(10);MyClassobj2(20);obj1.Print();//语句1obj2.Print();//语句2obj1.Set(20);//语句3obj2.Set(30);//语句4return0;}其主函数中错误的语句是()。A、语句1B、语句2C、语句3D、语句4标准答案:C知识点解析:在创建类对象obj1(10)时,前面有关键字const,所以当语句3调用obj1的成员函数试图修改其私有成员的数值的时候,会编译出错。15、有如下程序:#include<iostream>Usingnamespacestd;classA{public:A(inti):r1(i){}vgidprint(){cout<<’E’<<r1<<’-’;}voidprint()const{cout<<’C’<<r1*r1<<’-’;}private:intr1;};intmain(){Aa1(2);constA.a2(4);a1.print();a2.print();return0;}运行时的输出结果是()。A、运行时出错B、E2-C16-C、C4-C16-D、E2-E4-标准答案:B知识点解析:类A包括一个整型数据成员r1,一个一般成员函数print(),一个常成员函数print()const。在主函数中定义了对象a1,并对r1的值赋2和常对象a2,并对r1的值赋4,在C++中,常对象不能被更新,所以常对象只能调用类的常成员函数,而不能调用一般成员函数。而一般的对象,既可以调用一般成员函数也可以调用常成员函数。所以在本题中,当执行a1.print()时,输出为E2-,执行a2.print()时,输出为c16-。16、某类中有一个无参且无返回值的常成员函数Show,则正确的Show函数原型是()。A、constvoidShow();B、voidconstShow();C、voidShow()const;D、voidShow(const);标准答案:C知识点解析:常成员函数的说明格式如下:<返回类型><成员函数名>(<参数表>)const;,所以对于本题来说无参且无返回值的常成员函数show,其正确的函数原型是选项C。17、已知函数print()没有返回值,如果在类中将之声明为常成员函数,正确的是()。A、voidprint()const;B、constvoidprint();C、voidconstprint();D、voidprint(const);标准答案:A知识点解析:const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,把const关键字放在函数的参数表和函数体之间。18、有如下类定义:classAA{inta;public;intgetRef()const{return&a;}//①intgetValue()const{returna;}//②voidset(intn)const{a=n;}//③friendvoidshow(AAaa)const{cout<<a;}//④};其中的四个函数定义中正确的是()。A、①B、②C、③D、④标准答案:B知识点解析:此题考查了常成员函数和友元函数的概念。选项A中,getRef()函数的返回值和函数函数类型不符,故错误;C选项中set()常成员函数改变了数据成员的值,这是不允许的:D选项中show()函数被同时定义成友元函数和常成员函数是错误的。19、有如下程序:#include<iostream>usingnamespacestd;classSample{friendlongfun(Samples);public:Sample(longa){x=a;}private:longx;};longfun(Samples){if(s.x<2)return1:returns.x*fun(Sample(s.x-1)):}intmain(){intsum=0;for(inti=0;i<6;i++){sum+=fun(Sample(i));}cout<<sum;return0;}运行时输出的结果是()。A、120B、16C、154D、34标准答案:C知识点解析:此题考查的是友元函数和递归函数。因为fun函数是Sample类的友元函数,所以fun函数可以直接访问Sample类对象的私有成员x。主函数调用fun函数,构造参数为0~5。当n小于2时,fun函数返回1,其余返回值为n*fun(n-1)。n取0~5的值时fun(n)依次为1,1,2,6,24,120,累加结果为154。20、有如下程序:#include<iostream>usingnamespacestd;classBoat;classCar{public:Car(inti):weight(i){}MendintTotal(constCar&c,constBoat&b);//①private:intweight;};classBoat{public:Boat(inti):weight(i){}MendintTotal(constCar&c,constBoat&b);private:intweight;};intTotal(constCar&c,constBoat&b){//②returnc.weight+b.weight;}intmain(){Carc(10);Boatb(8);cout<<’’Thetotalweightis’’<<Total(c,b)<<endl;//③return0;}下列关于程序的描述中,正确的是()。A、程序编译正确B、程序编译时语句①出错C、程序编译时语句②出错D、程序编译时语句③出错标准答案:A知识点解析:程序中定义了类Car和类Boat,在两个类中分别定义他们的构造函数和友元函数friend。程序在VC6.0中编译通过。21、已知类MyClass声明如下:classMyClass{intn;public:MyClass(intk):n(k){}intgetValueoconst{returnn;}};在下列数组定义中正确的是()。A、MyClassx1[2];B、MyClassx2[2]={newMyClass(1),newMyClass(2)};C、MyClass*x3[2];D、MyClass*x4[2]={MyClass(1),MyClass(2)};标准答案:C知识点解析:考查韵是对象数组。选项A中在建立对象数组时也同样需要调用构造函数:选项B和D的类型不匹配,B中不能将指针传给非指针,D中是将非指针传给指针。22、已知类Myclass的定义如下:classMyClass{public:MyClass(intd){data=d;}~MyClass(){}private:intdata;};下列对Myclass类对象数组的定义和初始化语句中,正确的是()。undefinedA、MyClassarrays[2];B、MyClassarrays[2]={MyClass(5)};C、MyClassarrays[2]={MyClass(5),MyClass(6)};D、MyClass*arrays=newMyClass[2];标准答案:C知识点解析:在选项C中定义了类MyClass对象数组arrays[2],并用对象MyClass(5)和MyClass(6)对这个数组中的两个元素赋初值。国家二级C++机试(类和对象)模拟试卷第4套一、选择题(本题共24题,每题1.0分,共24分。)1、有如下类声明:classSAMPLE{intn;public:SAMPLE(inti=0):n(i){}voidsetValue(intn0);};下列关于getValue成员函数的实现中,正确的是()。A、SAMPLE::setValue(intn0){n=n0;}B、voidSAMPLE::setValue(intn0){n=n0;}C、voidsetValue(intn0){n=n0;}D、(intn0){n=n0;}标准答案:B知识点解析:此题考查了成员函数的定义格式。在类外部对成员函数定义时的一般格式为:返回类型类名::成员函数名(参数表){函数体},故此题正确答案为选项B。2、如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是()。A、public和publicB、public和protectedC、protected和publicD、protected和protected标准答案:D知识点解析:此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。3、有如下程序:#include<iostream>#include<cstring>usingnamespacestd;classXCD{char*a;intb;public:XCD(char*aa,intbb){a=newchar[strlen(aa)+1];strcpy(a,aa);b=bb;}char*Geta(){returna;}intGetb(){returnb;}};intmain(){char*p1="abcd",*p2="weirong";intd1=6,d2=8;XCDx(p1,d1),y(p2,d2);cout<<strlen(x.Geta())+y.Getb()<<endl;return0;}运行时的输出结果是()。A、12B、16C、14D、11标准答案:A知识点解析:由类XCD的定义可知,成员函数Geta()返回的是字符串的长度,Getb()返回的是参数b的值。在主函数中strlen(x.Geta())的值等于4,y.Getb()的值等于8,所以输出两者的和为12。4、若AA为一个类,a为该类的私有整型数据成员,getA()为该类的一个非静态公有成员函数,功能是返回a的值。如果x为该类的一个对象,要在类外访问x对象中a的值,正确的访问格式为()。A、AA.getA()B、x.getA()C、x.aD、AA::a标准答案:B知识点解析:要在类外访问x对象中a的值,必须调用类的非静态公有成员函数getAO。5、若有如下类声明classMyClass{public:MyClass(){cout<<1;}};执行下列语句MyClassa,b[2],*p1[]2:以后,程序的输出结果是()。A、11B、111C、1111D、11111标准答案:B知识点解析:此题考查的是对象的构造。本题共声明了一个MyClass对象a,一个包含2个MyClass对象的数组b和一个包含2个MyClass对象指针的数组p,所以一共创建了3个MyClass类的对象,即调用了3次构造函数。6、要定义一个引用变量p,使之引用类MyClass的一个对象,正确的定义语句是()。A、MyClassp=MyClass;B、MyClassp=newMyClass;C、MyClass&p=newMyClass;D、MyClassa,&p=a;标准答案:D知识点解析:在选项D)中,定义了MyClass类的一个对象a和引用变量p,并且声明p初始化为对a的引用。7、有如下类定义:classMyClass{intx;public:MyClass():x(0),y(0){}intGetX(){returnx;}voidSetX(intxx){x=xx;}inty;};已知obj是类MyClass的对象,下列语句中违反类成员访问控制权限的是()。A、obj.xB、obj.yC、obj.GetX()D、obj.SetX(0)标准答案:A知识点解析:由类MyClass的定义可知,数据成员x属于私有成员,所以只能在类的内部访问。类MyClass的对象obj不能访问类MyClass的私有成员x。8、有如下类定义:classPoint{intx_,y_;public:Point():x_(0),y_(0){}Point(intx,haty=0):x_(x),y_(y){}};若执行语句Pointa(2),b{3},*c[4];则Point类的构造函数被调用的次数是()。A、2次B、3次C、4次D、5次标准答案:C知识点解析:此题考查的是类的构造函数。构造函数在对象创建的时候由系统自动调用。在Pointa(2),b[3],*c[4]语句中:a(2)是定义一个对象并传入构造函数2,所以此时会调用以此构造函数;b[3]是定义一个包含3个对象的数组,所以构造函数会被调用3次:*c[4]定义的是4个Point类对象指针的数组,它并没有创建任何Point对象,所以不调用构造函数。9、有如下程序:#include<iostrearn>usingnamespacestd;classtest{private:inta;public:,test0{cout+"constructor"+endl;}test(inta){cout+a+endl;}test(consttest&test){a=test.a;cout+"copyconstmctor"+endl;}test(){Cout+"destructor"+endl;}};intmain(){testA(3);return0;}运行时输出的结果是()。A、3B、constructordestmctorC、copyconstructordestructorD、3destructor标准答案:D知识点解析:此题考查的是构造函数和析构函数。一个类可以有多个构造函数,但只能有一个析构函数。每一个对象在被创建时,都会隐含调用众多构造函数中的一个,而在销毁时又会隐含调用唯一的析构函数。此题中,主函数创建对象A是会隐含调用test(inta)这个构造函数,输出3:接着主函数结束,对象A销毁又隐含调用~test()析构函数输出destructor。10、有如下程序:#include<iostream>usingnamespacestd;classBase{public:Base(intx=0){cout<<x;}};classDerived:publicBase{public:Derived(intx=0){cout<<x;}private:Baseval;};intmain(){Derivedd(1);return0;}程序的输出结果是()。A、0B、1C、01D、001标准答案:D知识点解析:此题考查的是类的构造。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右)->执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序->执行自身的构造函数。本题中,首先会构造基类Base,调用Base类的构造函数,输出0;然后还定义了一个Base类的对象,再次调用Base类的默认构造函数输出0:最后构造自身,因主函数中传入了构造参数1,所以输出1。故最后输出结果是:001。11、有如下程序:#include<ioStream>usingnamespacestd;classSample{public:Sample(){}~Sample(){cout<<’*’;}};intmain(){Sampletemp[2],*pTemp[2];return0;}执行这个程序输出星号(*)的个数为()。A、1B、2C、3D、4标准答案:B知识点解析:在main函数中,定义了Sampletemp[2]的一个包含两个对象的数组,还定义了一个*pTemp[2],是包含两个指向类对象的指针的数组,故定义的指针当main函数结束后是不会调用析构函数的,只有包含两个对象的数组temp[2]会调用析构函数,因此只输出两个*。12、有如下程序:#include<iostream>usingnamespacestd;classONE{intc;public:ONE():c(0){cout<<1;}ONE(intn):c(n){cout<<2;}};classTWO{ONEone1;ONEone2;public:TWO(intm):one2(m){cout<<3;}};intmain(){TWOt(4);return0;}运行时的输出结果是()。A、3B、23C、123D、213标准答案:C知识点解析:由类TWO的定义可知,其成员为类ONE的两个对象one1和one2。所以在主函数中构建类TWO的对象t(4)时,先后调用类ONE的构造函数ONE():c(0){cout<<1;}和ONE(intn):c(n){cout<<2;}输出12,然后再调用类TWO的构造函数TWO(intm):one2(m){cout<<3;},输出3。13、有如下程序:撑include<iostream>usingnamespacestd;className{charname[20];public:Name(){strcpy(name,"");cout<<’?’;}Name(char*fname){strepy(name,fname);cout<<’?’;}};intmain(){Namenames[3]={Name("张三"),Name("李四")};return0;}运行此程序输出符号?的个数是()。A、0B、1C、2D、3标准答案:D知识点解析:类Name有两个构造函数,在默认构造函数中,给字符数组name赋空值,并输出一个?;在带有字符指针的构造函数中,把字符指针fname所指的字符串赋给字符数组name,并输出一个?。所以在主函数中,定义了Name的三个对象,name[0]、name[1]、name[2],在创建这三个对象时,会调用构造带参数的函数对前两个对象赋值,调用默认的构造函数把name[2]的值赋为空值。这时会输出三个“?”符号。14、有如下程序:#

温馨提示

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

评论

0/150

提交评论