版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。目录C++面向对象程序设计模拟测试题 2计算机技术与软件水平考试面向对象程序设计试题(1) 39计算机技术与软件水平考试面向对象程序设计试题(2) 41计算机技术与软件水平考试面向对象程序设计试题(3) 47计算机技术与软件水平考试面向对象程序设计试题(4) 54计算机技术与软件水平考试面向对象程序设计试题(5) 58计算机技术与软件水平考试面向对象程序设计试题(6) 64面向对象程序设计试题(6)参考答案 67计算机技术与软件水平考试面向对象程序设计试题(7) 69面向对象程序设计试题(7)参考答案 74全国计算机及应用面向对象程序设计试卷 75高等教育自学考试面向对象程序设计试题 79《面向对象程序设计》期末考试(开)试题及答案 86计科开放本科网络专业面向对象程序设计试题 94【面向对象程序设计】全国试题及答案 101【面向对象程序设计】全国试题及答案 110【面向对象程序设计】试题及答案 118C++面向对象程序设计模拟测试题一.选择填空1.下面关于对象概念的描述中,(A)是错误的。A.对象就是C语言中的结构变量;B.对象代表着正在创立的系统中的一个实体;C.对象是一个状态和操作(或方法)的封装体;D.对象之间的信息传递是经过消息进行的2.下面关于类概念的描述中,(D)是错误的。A.类是抽象数据类型的实现:B.类是具有共同行为的若干对象的统一描述体;C.类是创立对象的样板:D.类就是C语言中的结构类型3.在16位机中,int型字宽为(A)字节。A.2;B.4;C.6;D.84.类型修饰符unsigned修饰(D)类型是错误的。A.char;B.int;C.longint;D.float5.在inta[5]={1,3,5};中,数组元素a[1]的值是(C)。A.1;B.0;C.3;D.26.在intb[][3]={{1},{3,2},{4,5,6},{0}};中b[2][2]的值是(C)。A.0;B.5;C.6;D.27.下列表示式中,(C)是非法的。已知:inta=5;floatb=5.5;A.a%3+b;B.b*b&&++a;C.(.a>b)+(int(b)%2);D.―――a+b8.下列表示式中,(D)是合法的。已知:doublem=3.2;intn=3;A.m<<2;B.(m+n)|n;C.!m*=n;D.m=5,n=3.1,m+n9.下列for循环的次数为(B)。for(inti=0,x=0;!x&&i<=5;i++)A.5;B.6;C.1;D.无限10.下列while循环的次数是(A)。while(inti=0)i――;A.0;B.1;C.5;D.无限11.下述关于break语句的描述中,(C)是不正确的。A.break语句可用于循环体内,它将退出该重循环;B.break语句可用于开关语句中,它将退出开关语句;C.break语句可用于if体内,它将退出if语句;D.break语句在一个循环体内能够出现多次。12.下列关于开关语句的描述中,(A)是正确的。A.开关语句中default子句能够没有,也可有一个;B.开关语句中每个语句序列中必须有break语句;C.开关语句中default子句只能放在最后;D.开关语句中case子句后面的表示式能够是整型表示式。13.在一个被调用函数中,关于return语句使用的描述,(D)是错误的。A.被调用函数中能够不用return语句;B.被调用函数中能够使用多个return语句;C.被调用函数中,如果有返回值,就一定要有return语句;D.被调用函数中,一个return语句可返回多个值给调用函数。14.下列的(D)是引用调用。A.形参是指针,实参是地址值;B.形参和实参都是变量;C.形参是数组名,实参是数组名;D.形参是引用,实参是变量。15.在传值调用中,要求(C)。A.形参和实参类型任意,个数相等;B.实参和形参类型都完全一致,个数相等;C.实参和形参对应的类型一致,个数相等;D.实参和形参对应的类型一致,个数任意。16.在C++中,关于下列设置参数默认值的描述中,(C)是正确的。A.不允许设置参数的默认值;B.设置参数默认值只能在定义函数时设置;C.设置参数默认值时,应该是先设置右边的再设置左边的;D.设置参数默认值时,应该全部参数都设置。17.重载函数在调用时选择的依据中,(D)是错误的。A.参数个数;B.参数的类型;C.函数名字;D.函数的类型18.采用函数重载的目的在于(D)。A.实现共享;B.减少空间;C.提高速度;D.使用方便,提高可读性19.在下列关键字中,用以说明类中公有成员的是(A)。A.public;B.private;C.protected;D.friend;20.下列的各类函数中,(C)不是类的成员函数。A.构造函数;B析构函数;C.友元函数;D.拷贝初始化构造函数21.作用域运算符的功能是(D)。A.标识作用域的级别的;B.指出作用域的范围的;C.给定作用域的大小的;D.标识某个成员是属于哪个类的。22.(D)不是构造函数的特征。A.构造函数的函数名与类名相同;B.构造函数能够重载;C.构造函数能够设置缺省参数;D.构造函数必须指定类型说明。23.(A)是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数名与类名不同;C.析构函数的定义只能在类体内;D.析构函数能够有一个或多个参数。24.一般的拷贝初始化构造函数的参数是(C)。A.某个对象名;B.某个对象的成员名;C.某个对象的引用名;D.某个对象的指针名。25.关于成员函数特征的下述描述中,(A)是错误的。A.成员函数一定是内联函数;B.成员函数能够重载;C.成员函数能够设置参数的缺省值;D.成员函数能够是静态的。26.下述静态数据成员的特征中,(A)是错误的。A.说明静态数据成员时前边要加修饰符static;B.静态数据成员要在类体外进行初始化;C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;D.静态数据成员不是所有对象所共用的。27.友元的作用(A)。A.提高访问对象成员的效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。28.已知:类A中一个成员函数说明如下:voidSet(A&a);其中,A&a的含意是(C)A.指向类A的指针为a;B.将a的地址值赋给变量Set;C.a是类A的对象引用,用来作函数Set()的形参;D.变量A与a按位相与作为函数Set()的参数。29.下列关于对象数组的描述中,(D)是错误的。A.对象数组的下标是从0开始的;B.对象数组的数组名是一个常量指针;C.对象数组的每个元素是同一个类的对象;D.对象数组只能赋初值,而不能被赋值。30.已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,(A)是正确的。A.voidprint()const;B.constvoidprint();C.voidconstprint;D.voidprint(const);31.关于new运算符的下列描述中,(D)是错误的。A.它能够用来动态创立对象和对象数组;B.使用它创立的对象或对象数组能够使用运算符delete删除;C.使用它创立对象时要调用构造函数;D.使用它创立对象数组时必须指定初始值。32.关于delete运算符的下列描述中,(C)是错误的。A.它必须用于new返回的指针;B.它也适用于空指针;C.对一个指针能够使用多次该运算符;D.指针名前只用一对方括号符,不论所删除数组的维数。33.下列说明中,constchar*ptr;ptr应该是(C)A.指向字符常量的指针;B.指向字符的常量指针;C.指向字符串常量的指针;D.指向字符串的常量指针;34.下列定义中,(B)是定义指向数组的指针p。A.int*p[5];B.int(*p)[5];C.(int*)p[5];D.int*p[];35.下列对派生类的描述中,(D)是错误的。A.一个派生类能够作另一个派生类的基类;B.派生类至少有一个基类;C.派生类的成员除了它自己的成员外,还包含了它的基类的成员;D.派生类中继承的基类成员的访问权限到派生类保持不变。36.派生类的对象对它的基类成员中(A)是能够访问的。A.公有继承的公有成员;B.公有继承的私有成员;C.公有继承的保护成员;D.私有继承的公有成员;37.派生类的构造函数的成员初始化列中,不能包含(C)。A.基类的构造函数;B.派生类中子对象的初始化;C.基类的子对象初始化;D.派生类中一般数据成员的初始化。38.关于多继承二义性的描述中,(C)是错误的。A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性;B.解决二义性的最常见的方法是对成员名的限定法;C.基类和派生中同时出现的同名函数,也存在二义性问题;D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性。39.设置虚基类的目的是(B)。A.简化程序;B.消除二义性;C.提高运行效率;D.减少目标代码。40.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化(D)。A.与虚基类下面的派生类个数有关;B.多次;C.二次;D.一次。41.对定义重载函数的下列要求中,(D)是错误的。A.要求参数的个数不同;B.要求参数中至少有一个类型不同;C.要求参数个数相同时,参数类型不同;D.要求函数的返回值不同。42.下列函数中,(C)不能重载。A.成员函数;B.非成员函数;C.析构函数;D.构造函数。43.下列对重载函数的描述中,(A)是错误的。A.重载函数中不允许使用缺省参数;B.重载函数中编译器根据参数表进行选择;C.不要使用重载函数来描述毫无相干的函数;D.构造函数重载将会给初始化带来多种方式。44.关于虚函数的描述中,(C)是正确的。A.虚函数是一个static类型的成员函数;B.虚函数是一个非成员函数;C.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数;D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型。45.关于纯虚函数和抽象类的描述中,(C)是错误的。A.纯虚函数是一种特殊的虚函数,它没有具体的实现;B.抽象类是指具有纯虚函数的类;C.一个基类说明有纯虚函数,该基类的派生类一定不再是抽象类;D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。46.下列描述中,(D)是抽象类的特征。A.能够说明虚函数;B.能够进行构造函数重载;C.能够定义友元函数;D.不能说明其对象。47.面向对象程序设计中的数据隐藏指的是(D)A.输入数据必须输入保密口令B.数据经过加密处理C.对象内部数据结构上建有防火墙D.对象内部数据结构的不可访问性[解析]输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征;对象内部数据结构上也不可能建有防火墙,因此它们都不是面向对象程序设计中所指的数据隐藏。面向对象程序设计系统中的封装单位是对象,对象之间只能经过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中。这就是面向对象程序设计中的数据隐藏所指。48.下列各项中不符合函数重载必须满足的条件的是(C)A.有不同的参数个数B.对应的参数类型不相同C.A和B必须同时满足D.A和B只要满足一个即可[解析]我们知道,在同一个作用域中,要实现函数重载必须满足的条件的是:①有不同的参数个数;或者②对应的参数有不相同的数据类型,即①和②中只要有一个满足就能够了。当然两者都满足更好,但这不是必须的。49.下列带缺省值参数的函数说明中,正确的说明是(A)A.intFun(intx,inty=2,intz=3);B.intFun(intx=1,inty,intz=3);C.intFun(intx,inty=2,intz);D.intFun(intx=1,inty,intz=3);[解析]在带缺省值参数的函数说明中,正确的说明应该是无缺省值的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列带缺省值的参数。从所给出的四个选项来看,只有"intFun(intx,inty=2,intz=3)"符合这条规定,其它的都不符合。50.有如下的对类"CSample"的说明,其中(A)是错误的。classCSample{A.inta=23;B.CSample();public:C.CSample(intval);D.~CSample();}[解析]在下面对类"CSample"说明中,"CSample()"和"CSample(intval)"是该类重载的构造函数."~CSample()"是该类的析构函数,这三个语句都是正确的。错误的语句是"inta=23",因为它违反了在类的声明(不论是引用性声明,还是定义性声明)中都不能以赋值表示式的形式给它的数据成员进行初始化。51.已知类A中的一个成员函数的说明如下:voidSet(A&a);则该函数的参数"A&a"的含义是(C)A.指向A的指针为aB.将变量a的地址赋给类AC.类A对象引用a用作函数的形参D.变量A与a按位与后作函数参数[解析]因为A是一个类,因此"A&a"表示a是类A的对象,但因为对象a的前缀了符号"&",则"&a"表示是类A的对象引用。因此"A&a"的含义是类A对象引用a用作函数的形参。52.若类A和类B的定义如下:classA{public:inti,j;voidget();};classB:A{inti,j;protected:intk;public:voidmake();};voidB::make(){k=i*j;}则上述语句中(D)是非法的表示。A.voidget();B.intk;C.voidmake();D.k=i*j;[解析]对于给定的四项中,前三项都是正确的,只有第四项是错误的。因为,类B是类A的私有派生类(缺省访问类型),因此A中的公类型的数据成员在类B中成为了私有数据成员,但函数"voidB::make()"既然是类B的成员函数,则既可访问类A中的公有数据成员,也能访问类B中的私有数据成员,则表示式"k=i*j;"造成了访问的二义性,即其中的i和j,到底是取自类A呢?还是取自类B呢?53.下面的主函数体中,(A)是错误的。classA{inti;public:virtualvoidfun()=0;A(inta){i=a;}};classB:publicA{intj;public:voidfun(){cout<<"B::fun()\n";}B(intb,intc):A(b){j=c;}};voidmain()A.{Aa(5);}B.{A*pa;}C.{Bb(7);}D.{B*pb;}[解析]在类A中,函数"virtualvoidfun()=0"为纯虚函数,因此,类A为抽象类。作为抽象类,它是不能被用来定义具体对象的,而语句"Aa(5);"恰恰是定义抽象类的对象的,因此它是错误的54.拷贝构造函数的作用是(C)A.进行数据类型的转换B.用对象调用成员函数C.用对象初始化对象D.用一般类型的数据初始化对象[解析]进行数据类型的转换和用一般类型的数据初始化对象都是一般构造函数的功能。用对象调用成员函数不用构造函数,只要用"对象名.成员函数名"即可。因此拷贝(复制)构造函数的作用,只能是用对象来初始化对象。55.下列说法中,正确的说法是(B)A.所有的运算符都能被重载B.运算符被重载时,它们的优先级与结合性不会改变C.当需要时,我们能够自定义一个运算符来进行重载D.每个运算符都能够被重载成成员函数和友元函数[解析]当重载运算符时,不是所有的运算符都能被重载,有几个运算符是不能被重载的,如三目运算符'?:','.','*','::'.'#'等;也不是每个运算符都能够被重载成成员函数和友元函数,如运算符'=','()','[]'和'->'都只能被重载成成员函数;无论何时,都不能自定义运算符来进行重载,也即重载只能对已有运算符进行;可是运算符被重载时,它们的优先级与结合性不会改变。56.下面对结构或类中成员的访问中,不正确的访问是(A)A.*pointer.salary;(其中pointer为指向类对象的指针)B.pointer->salary;C.x=worker.salary;(其中worker为具有类类型的对象)D.Location&rA=A1;intx=rA.GetX();(Location为已定义的类,A为对象)[解析]因pointer为指向类对象的指针,因此"pointer->salary"是正确的访问数据成员的形式;因worker为具有类类型的对象,因此"worker.salary"也是正确的访问数据成员的形式;因Location为已定义的类,A1为对象,因此"Location&rA=A1;intx=rA.GetX();"表示以对象A1初始化对象引用rA,然后由对象引用rA调用成员函数GetX()给变量x赋值,这样的访问成员函数的形式也是正确的;"*pointer.salary;"中,因为运算符'.'的优先级高于运算符'*'的优先级,因此相当于"*(pointer.salary);",那正确的形式应该是"*(pointer->salary);"。故"*pointer.salary"是不正确的访问。57.以下不属于存取权限的是(B)。A.publicB.staticC.protectedD.private58.以下叙述中正确的是(D)A.在C++中数据封装是经过各种类型来实现的B.在C++中,数据封装能够由struct关键字提供C.数据封装就是使用结构类型将数据代码连接在一起D.数据封装以后,依然能够不经过使用函数就能直接存取数据。59.以下叙述中不正确的是:(D)A.对象之间能够相互赋值B.对象能够用作数组的元素C.对象能够用作函数参数D.一个对象不能用作另一个对象的成员59..以下叙述中正确的是:(B)A.在定义构造函数时能够指定返回类型B.在定义析构函数时不能指定参数C.一个类只能有一个构造函数D.在一个类能够有多个析构函数60.假定类A已经定义,对于以A为基类的单一继承类B,以下定义中正确的是:(A)A.classB:publicA{//...};B.classA:publicB{//...};C.classB:publicclassA{//...};D.classA:classBpublic{//...};61.下面叙述不正确的是:(D)A.派生类一般都用公有派生;B.对基类成员的访问必须是无二义性的;C.赋值兼容原则也适用于多重继承的组合;D.基类的公有成员在派生类中依然是公有的。62.C++类体系中,不能被派生类继承的有(A)。A.转换函数.构造函数B.构造函数.赋值操作函数C.虚函数.静态成员函数D.静态成员函数.转换函数63.以下基类中的成员函数(C)表示纯虚函数A.virtualvoidvf(int);B.voidvf(int)=0;C.virtualvoidvf()=0;D.virtualvoidvf(int){}64.经过一个对象调用虚函数时,C++系统对该调用采用(A)。A.动态联编B.静态联编C.不确定是哪种联编D.函数重载65.以下叙述不正确的是(C)A.转换函数不能带有参数B.转换函数不能指定返回类型C.转换函数不能说明为虚函数D.一个类能够有多个转换函数66.有如下一个函数模板:template<classT>Tmax(Tx,Ty){return(x>y)?(x):(y);}当对T传给char*类型时,则可能产生错误结果,因此应该为这个函数模板提供一个(C)A.模板实例B.特定模板函数C.重载函数模板D.替换模板67.下面的针对在C++中说明类的各种建议中,(C)是不正确的。A.尽量使类接口既完整又最紧凑B.尽量少用constC.避免对指针和数值类型重载D.明确禁用无端隐含生成的成员函数68.一个C++程序至少应包含(B)个函数。A.0B.1C69.在微型机上,一个unsignedint型变量在内存中占(B)个字节的存储空间。A.1B.2C.370.下面语句中(C)是非法的。A.inta=3,b=3;B.inta,b=3;C.inta=b=3;D.inta=3,b71.下述语句intx,i=3;x=(i++)+(i++)+(i++);执行后,x的结果为(A)。A.9B.15C72.设a=12,n=5,则表示式a%=(n%=2)运算后,a的值为(A).A.0B.173.设a=3,b=2,c=l,则表示式a=b>c的值为(A).A.0B.174.C++编译器一般不提供对(C.)的检查。A.函数原型B.变量类型C.数组边界D.指针类型75.只有(D)变量才能说明为extern变量。A.全局变量B.静态变量C.寄存器变量D.自动变量76.设有两个int型的指针p1和p2,则p1和p2(B)。A.能够相加,但不能够相减B.能够相减,但不能够相加C.既不能相加,也不能相减D.能够相加,也能够相减78.假设已定义了一个字符型指针char*p;欲使指针指向常量串"Ilovechina!",可用语句(B)来完成。A.*p="IloveChina!";B.p="IloveChina!";C.*p->'IloveChina!";D.p->"IloveChina!"79.下面关键字中(D)不能够刚来定义类。A.classB.structC.unionD.enum80.一个类的构造函数(D).A.能够有不同的返回类犁B.只能返回整型C.只能返回void型D.没有任何返同类刑81.若类X是类Y的友元类,则下列访问关系中(B)是正确的A.类X的成员不能访问类Y的私有成员B.类X的成员能够访问类Y的私有成员C.类Y的成员能够访问类X的私有成员D.仅类Y的公共成员可访问类X的私有成员82.在c++中,一个虚函数是经过关键字(A)放在其基类说明的前面来加以说明的A.virtualB.protectedC.operatorD.this83.在派生关系中,(A)。A.构造函数和释放函数是不能继承的B.构造函数能够继承,但释放函数不能够继承C.构造函数不能够继承,但释放函数能够继承D.构造函数和释放函数都能继承84.下列标识符中(A)是正确的。A.suml23B.suml23$C.*pt_123D.Sum-Count85.下面语句中(C)是非法的。A.charx='C';B.charx='#';C.charx="*";D.charx='$';86.设x=1.2,y=2.0,则语句z=(int)x+y:执行后,x的结果为(D)A.3.2B.187.设n=l,b=2,则表示式a&b的值为(A)。A.0B.188.全局变量的作用域限于(B)。A整个程序B.从定义变量的位置开始到本源文件结束C.本源文件D.从定义变量的位置开始到本程序结束89.在C++语言中,数组能够作为函数的参数,但若用数组名作函数的实参,则将(C)传递到被调函数中去。·A整个数组B.数组的第一个元素C.数组地址D.整个数组的拷贝90.发生函数调用时,主调函数将实参传递给被调函数,在被调函数执行过程中,实参的值(C)。A.是能够改变的B.是不可改变的C.能够经过指针间接改变D.是数组时能够改变91.语句int*p[n]和int(*p)[n]的含义分别是(B)。Aint*p[n]定义了一个数组指针,int(*p)[n]定义了一个指针数组B.int*p[n]定义了一个指针数纽,int(*p)[n]定义了一个数组指针Lint*p[n]定义了一个数组指针,int(*p)[n]定义了一个数组指针D.int*p[n]定义了—个指针数组,int(*p)[n]定义了一个指针数组92.若有如下枚举类型enumweekday{mon,tue,wed,thu=100,Fri,sat};则wed的取值为(A)。A.2B.3C.9993.只有(D)变量才能说明为register变量。A全局变量B.静态变量C.外部变量D.自动变量94.欲使一整型指针p指向一整型变量x,下面哪种方式最好?(C)A.intx,*p;*p=x;B.intx,*p;*p=&x;C.intx;int*p=&x;D.intx,*p;p=x;95.在C++中,一个变量一旦用const修饰,便无法对其进行重写,其生存期一直持续到(D)。A.所在源文件的末尾B.程序结束C.编译结束D.其作用域结束96.在C++中,当为一个变量定义引用时,引用类型(A)。A.必须与变量类型一致B.不一定与变量类型一致C.也即变量的指针D.也即变量的地址97.在用C++定义类时,下面哪个关键字可用以对类成员进行修饰?(C)A.externB.autoC.staticD.register98.在C++的类中以成员函数方式重载双目运算符时,只能指定(A)。A.一个参数B.两个参数C.二个参数D.不能指定参数99.在C++中,对于基类的protected成员,当以protected方式派生一个新类时。该成员将成为派生类的(B)成员。A.privateB.protectedC.publicD.非法100.C++的基类指针能够访问派生类对象,但不能访问派生类对象的(D)成员。A.privateB.protectedC.publicD.新增101.在C++中,当一个对象被创立后,它的每一个成员函数都含有一个系统自动生成的隐含的指针,称之为(D)指针。A.对象B.派生C基类D.this102.凡是能用以派生新类,却不能创立自己的对象的类称为(B)。A.虚基类B.抽象类C容器类D.派生类103.以下不正确的叙述是(D)。A在C++程序中,逗号运算符的优先级最低。B.在C++程序中,APH和aph是两个不同的变量。C.若a和b类型相同,在计算了赋值表示式a=b后b中的值将放人a中,而b中的值不变D.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值104.以下符合C++语法的赋值表示式是(B)。A.d=9+e+f=d+9B.d=9+e,f=d+9C.d=9+e,e++,d+9D.d=9+e++=d+7105.设变量a是整型,f是实型,i是双精度型,则表示式10+'a'+i*f值的数据类型是(C.)。A.intB.floatC.doubleD.不确定106.已知ch是字符型变量,下面不正确的赋值语句是(A)。A.ch='a+b';B.ch='\0';C.ch='7'+'9';D.ch=5+9;107.下面关键字中(D)不能够用来定义类?A.classB.structC.unionD.enum108.以下描述中正确的是(D)。A.for循环只能用于循环次数已经确定的情况B.for循环是先执行循环体语句,后判断表示式C.在for循环中,不能用break语句跳出循环体D.for循环的循环体语句中,能够包含多条语句,但必须用花括号括起来二.判断下列描述的正确性,对者划√,错者划×。1.C++引进了引用的概念,对编程带来了很多方便。(√)2.C++允许使用友元,可是友元会破坏封装性。(√)3.转义序列表示法只能表示字符不能表示数字。(×)4.引用是用来给某个变量以别名的变量。对引用的操作,实质上就是对被引用的变量的操作。(√)5.在C++中,传址调用将被引用调用所替代。(√)6.所有的函数在定义它的程序中都是可见的。(×)7.使用关键字class定义的类中缺省的访问权限是私有(private)的。(√)8.作用域运算符(∷)只能用来限定成员函数所属的类。(×)9.构造函数和析构函数都不能重载。(×)10.所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。(×)11.某类中的友元类的所有成员函数能够存取或修改该类中的私有成员。(√)12.如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。(√)13.指向对象的指针与对象都能够作函数参数,可是使用前者比后者好些。(√)14.对象引用作函数参数比用对象指针更方便些。(√)15.对象数组的元素能够是不同类的对象。(×)16.constchar*p说明了p是指向字符串的常量指针。(×)17.C++语言中,既允许单继承,又允许多继承。(√)18.派生类的继承方式有两种,公有继承和私有继承。(×)19.在公有继承中,基类中只有公有成员对派生对象是可见的。(×)20.在私有继承中,基类中只有公有成员对派生类是可见的。(√)21.构造函数能够被继承。(×)22.析构函数不能被继承。(√)23.多继承情况下,派生类的构造函数的执行顺序取决于定义派生时所指定的各基类的顺序。(√)24.解决多继承情况下出现的二义性的方法之一是使用成员名限定法。(√)25.函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。(√)26.多数运算符能够重载,个别运算符不能重载,运算符重载是经过函数定义实现的。(√)27.对每个可重载的运算符来讲,它既能够重载为友元函数,又能够重载为成员函数,还能够重载为非成员函数。(×)28.对单目运算符重载为友元函数时,说明一个形参;重载为成员函数时,不能显式说明形参。(√)29.重载运算符保持原运算符的优先级和结合性不变。(√)30.虚函数是用virtual关键字说明的成员函数。(√)31.构造函数说明为纯虚函数是没有意义的。(√)32.抽象类是指一些没有说明对象的类。(×)33.动态联编是在运行时选定调用的成员函数的。(√)34.使用提取符(<<)能够输出各种类型的变量的值,也能够输出指针值.(×)35.静态变量在整个程序的运行过程中始终都是存在着的。(√)36.一个变量的指针就是该变量地址所指向的存储单元。(√)37.在C++中,能够定义一个指向函数的指针。(√)38.C++语言不允许把一个结构作为一个整体进行输入输出。(√)39.在C++中定义数组时,任何时候都不能够省略下标。(×)40.对于inta[1],能够用a++来指向数组的第二个元素。(×)41.C++对常量也能够建立引用。(√)42.在定义一个类时,不能在类说明中对数据成员使用表示式进行初始化。(√)43.如果在类声明中没有定义拷贝构造函数,就不能用一个对象去初始化另一个对象。(×)44.一个指向基类的指针能够访问从基类派生出来的任何对象。(√)45.C++语言函数不能进行嵌套定义。(√)46.语句int*p():定义了一个指向函数的指针。(√)47.在C++语言中,数据类型的转换必须是显式的。(×)48.发生传值调用时,形参和实参各占一个独立的存储空间。(√)49.C++语言不能定义字符串变量。(√)50.在C++中,当存在一个与模板函数同名的普通函数时,调用的顺序是模板函数优先。(×)51.C++的虚函数必须是类的一个成员,而不允许是类的友元。(√)三.写出下列程序的输出结果1.引用参数#include<iostream.h>voidswap(int&,int&);voidmain(){inta=5,b=8;cout<<"a="<<a<<","<<"b="<<b<<endl;swap(a,b);cout<<"a="<<a<<","<<"b="<<b<<endl;}voidswap(int&x,int&y){inttemp=x;x=y;y=temp;}执行该程序后,输出结果如下:a=5,b=8a=8,b=51.返回引用#include<iostream.h>int&f1(intn,ints[]){int&m=s[n];returnm;}voidmain(){ints[]={5,4,3,2,1,0};f1(3,s)=10;cout<<f1(3,s)<<endl;}执行该程序后,输出结果如下:102.构造.析构函数调用#include<iostream.h>classA{private:inta,b;public:A();A(inti,intj);voidprint();};A::A(){a=b=0;cout<<"Defaultconstructoriscalled.\n";}A::A(inti,intj){a=i;b=j;cout<<"Constructoriscalled.\n";}voidA::print(){cout<<"a="<<a<<","<<"b="<<b<<endl;}voidmain(){Am,n(4,8);m.print();n.print();}执行该程序后,输出结果如下:Defaultconstructoriscalled.Constructoriscalled.a=0,b=0a=4,b=82.构造.析构函数调用#include<iostream.h>classTDate{private:intyear,month,day;public:TDate(inty,intm,intd);~TDate();voidprint();};TDate::TDate(inty,intm,intd){year=y;month=m;day=d;cout<<"Constructoriscalled."<<endl;}TDate::~TDate(){cout<<"Destructoriscalled.\n";}voidTDate::print(){cout<<year<<"."<<month<<"."<<day<<endl;}voidmain(){TDatetoday(,1,10),tomorrow(,1,111);cout<<"Todayis";today.print();cout<<"Tomorrowis";tomorrow.print();}执行该程序后,输出结果如下:Constructoriscalled.Constructoriscalled.Todayis.1.10Tomorrowis.1.11Destructoriscalled.3.对象指针作参数#include<iostream.h>classM{private:intx,y;public:M(){x=y=0;}M(inti,intj){x=i;y=j;}voidcopy(M*m);voidsetxy(inti,intj){x=i;y=j;}voidprint(){cout<<x<<","<<y<<endl;}};voidM::copy(M*m){x=m->x;y=m->y;}voidfun(Mm1,M*m2);voidmain(){Mp(5,7),q;q.copy(&p);fun(p,&q);p.print();q.print();}voidfun(Mm1,M*m2){m1.setxy(12,15);m2->setxy(22,25);}执行该程序后,输出结果如后:5,722,253.对象引用作参数#include<iostream.h>classA{private:intm;public:A(inti=0){m=i;cout<<"Constructoriscalled.\n";}voidset(inti){m=i;}voidprint()const{cout<<m<<endl;}~A(){cout<<"Destructoriscalled.\n";}};voidfun(constA&c){C.print();}voidmain(){fun(5);}执行该程序后,输出结果如下:Constructoriscalled.5Destructoriscalled.4.派生#include<iostream.h>classA{inta,b;public:A(inti,intj){a=i;b=j;}voidmove(intx,inty){a+=x;b+=y;}voidshow(){cout<<"("<<a<<","<<b<<")\n";}};classB:privateA{intx,y;public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidshow(){cout<<x<<","<<y<<endl;}voidfun(){move(3,5);}voidf1(){A::show();}};voidmain(){Ae(1,2);e.show();Bd(3,4,5,6);D.fun();D.show();D.f1();}执行该程序后,输出结果如下:(1,2)5,6(6,9)4.派生#include<iostream.h>classA{inta,b;public:A(inti,intj){a=i;b=j;}voidmove(intx,inty){a+=x;b+=y;}voidshow(){cout<<"("<<a<<","<<b<<")\n";}};classB:publicA{intx,y;public:B(inti,intj,intk,intl):A(i,j),x(k),y(l){}voidshow(){cout<<x<<","<<y<<endl;}voidfun(){move(3,5);}voidf1(){A::show();}};voidmain(){Ae(1,2);e.show();Bd(3,4,5,6);D.fun();D.A::show();D.B::show();D.f1();}执行该程序后,输出结果如下:(1,2)(6,9)5,6(6,9)5.虚函数与派生#include<iostream.h>classB{protected:intb;public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<"B::show()iscalled.b="<<b<<endl;}};classD:publicB{protected:intd;public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<"D::show()iscalleD.d="<<d<<endl;}};voidmain(){Dd1(108);}执行该程序后,输出结果如下:B::show()iscalled.b=158D::show()iscalleD.d=2085.虚函数与派生#include<iostream.h>classA{public:A(){}virtualvoidf(){cout<<"A::f()iscalleD.\n";}};classB:publicA{public:B(){f();}voidg(){f();}};classC:publicB{public:C(){}virtualvoidf(){cout<<"C::f()iscalled.\n";}};voidmain(){Cc;C.g();}执行该程序后,输出结果如下:A::f()iscalled.C::f()iscalled.6.请分析以下的程序,给出该程序的正确执行结果。#include<iostream.h>intadd(intx,inty){returnx+y;}voidmain(){intm=2,n=3;cout<<"1:"<<add(m++,m+n)<<endl;m=2,n=3;cout<<"2:"<<add(++m,m+n)<<endl;m=2,n=3;cout<<"3:"<<<endl;m=2,n=3;cout<<"4:"<<<endl;}答:1:72:83:84:9[解析]在说明答案之前,要说明两个问题:(1)C++语言中,函数参数是压在栈里的,因压栈是从前往后进行的,因此出栈就是从后向前进行的,也即先取最后的参数,然后再向前逐个取用;(2)对于单加运算,m++是先执行后加1,++m是加1后再执行。由此,因m=2,n=3;,因此:1:(m++)+(m+n)=2+(2+3)=7(m++后执行,且后加1,因此m=2一直未变)2:(++m)+(m+n)=3+(2+3)=8(++m后执行,但先加1,执行++m时,m=3了)3:(m+n)+(m++)=(3+3)+2=8(先执行m++,后加1,执行m+n时,m=3了)4:(m+n)+(++m)=(3+3)+3=9;(先执行++m,且先加1,故一开始就有m=3)7.请分析下面的程序并给出该程序的执行结果。#include<iostream.h>classAA{inta;public:AA(){cout<<"InitualizingAA!\n";}~AA(){cout<<"DestroyingAA!\n";};classBB{intb;AAp;public:BB(){cout<<"InitualizingBB!\n";}~BB(){cout<<"DestroyingBB!\n";};voidmain(){BBX;cout<<"Endingmain!\n";}答:InitualizingAA!InitualizingBB!Endingmain!DestroyingBB!DestroyingAA![解析]虽然在主程序中只定义了一个类BB的对象,但在类BB中声明了类AA的对象作为它的数据成员。当一个类中含有对象作为数据成员时,在生成对象时,先调用成员对象的构造函数,再调用类自己的构造函数,因此输出了"InitualizingAA!"(成员对象构造函数的输出)和"InitualizingBB!"(类自己构造函数的输出)。对象生成后,执行下一句输出语句,则输出"Endingmain!"。此时程序结束,调用析构函数来析构掉对象,先调用类自身的析构函数,其输出为"DestroyingBB!",再调用成员对象的析构函数,其输出为"DestroyingAA!"。8.写出下列程序的运行结果。#include<iostream.h>classAA{inta;public:AA(inti){a=i;cout<<"AA="<<a<<"\n";}virtual~AA(){cout<<"~AA="<<a<<"\n";}};classBB:publicAA{intb;public:BB(inti,intj):AA(i){b=j;cout<<"BB="<<b<<"\n";}~BB(){cout<<"~BB="<<b<<"\n";}};voidmain(){AA*pa=newAA(8);deletepa;AA*pb=newBB(6,9);deletepb;}答:AA=8~AA=8AA=6BB=9~BB=9~AA=6[解析]语句"AA*pa=newAA(8);"动态生成一个类AA的对象并把它的地址赋给对象指针"pa",为此系统调用了AA的构造函数,输出AA=8。接下来,执行语句"deletepa;"删除该对象指针,其实是删除了动态生成的对象,因此调用类AA的析构函数,输出~AA=8。接着执行语句"AA*pb=newBB(6,9);",动态生成一个类BB的对象,并将其地址赋给类AA的指针"pb"。在生成派生类BB对象时,系统首先调用基类AA的构造函数输出AA=6,然后调用派生类BB的构造函数输出BB=9。最后执行语句"deletepb;",由于基类AA的析构函数被定义为虚函数,因此在运行时是动态联编的。故系统先调用派生类BB的析构函数输出~BB=9,再调用基类AA的析构函数输出~AA=6(若基类析构函数非虚函数,则只输出~AA=6)。9.写出下列程序的运行结果。#include<iostream.h>classAA{public:staticintn;AA(){n++;}};intAA::n=0;main(){cout<<"AA::n="<<AA::n<<endl;AAd1;cout<<<d1.n<<endl;AAd2;cout<<<D2.n<<endl;AAd3,d4;cout<<<d1.n<<endl;cout<<<d2.n<<endl;}答:AA::n=0d1.n=1d2.n=2d1.n=4d2.n=4[解析]由于数据成员n的访问属性是公有的,因此在类外可访问它;又它是静态变量,因此具有全局性。在构造函数中,执行的是n++操作,即每次调用构造函数n就加1。当程序开始时,因未定义对象,因此n的值为初始化时的值,则输出为"AA::n=0"。当定义了对象d1后,由于调用了构造函数,则该对象中n=1,故输出"d1.n=1"。同理,对象d2输出"d2.n=2"。由于接下来生成了两个对象d3和d4,调用两次构造函数,n两次加1,此时n=4,因此下面两条语句的输出为"d1.n=4"和"d2.n=4"。10.写出下列程序的输出结果。#include<iostream.h>classAA{public:AA{}{cout<<"ConstructorofAA.\n";fun();}virtualvoidfun(){cout<<"AA::fun()iscalled.\n";}};classBB:publicAA{public:BB(){cout<<"ConstructorofBB.\n";fun();}voidfun(){cout<<"BB::fun()iscalled.\n";}};voidmain(){BBd;}答:ConstructorofAA.AA::fun()iscalled.ConstructorofBB.BB::fun()iscalled.[解析]虽然函数fun()说明为虚函数,但当在构造函数中被调用时,呈现的是静态联编,即基类和派生类都调用各自的函数fun()。因此,当生成对象d时,先调用基类的构造函数,在构造函数中又调用自己的函数"fun()",因此输出为"ConstructorofAA."和"AA::fun()iscalled."。同理调用派生类的构造函数时,生成的输出为"ConstructorofBB."和"BB::fun()iscalled."。11.请给出下面的程序的输出结果。#include<iostream.h>templatevoidsort(T*a,intn){Tnum;for(inti=0;i<N-1;i++){for(intj=i;j<N-1;j++)if(a[j]>a[j+1]){num=a[j];a[j]=a[j+1];a[j+1]=num;}}for(i=0;i<N;I++)cout<<A[I];cout<<endl;}voidmain(){intiver[5]={12,45,9,23,37};doubledver[5]={22.3,56.7,43.5,13.8,8.6};sort(iver,5);sort(dver,.5);}答:9122337458.613.822.343.556.7[解析]这是使用模板的例子。函数sort是一个递增的排序函数,T是个模板。当数组是整型数据类型时,它为整型数组排序;当数组为双精度数据类型时,它为双精度数组排序。因此输出如上结果。12.给出如下程序运行结果:intmain(){intnum=50;int&ref=num;ref=ref+10;cout<<"num="<<num<<endl;num=num+40;cont<<"ref="<<ref<<endl;return0;}13.给出如下程序运行结果:classtest{private:intnum;public:test();intgetint(){returnnum;}~test();};test::test(){num=0;}test::~test(){cout<<"Destuctorisactive"<<endl;}voidmain(){testx[3];cout<<"Exitingmain"<<endl;}14.#include<iostream.h>voidmain()intb[3][5]={11,12,13,14,15,21,22,23,24,25,31,32,33,34,35};int(*p)[5]:p=b;For(intj=0;j<5;j++)cout<<*(*p+j)<<",";cout<<endl;}15.#include<iostream.h>#definePI3.1415926#defineFUDGE(k)k*PI;#definePR(a)cout<<"a"<<int(a)<<"\t";#definePRINT(a)PR(a);cout<<"\n";#definePRINT2(a,b)PR(a);PRlNT(b);#definePRINT3(3,b,c)PR(a):PRINT2(b,c);#defineMAX(a,b)(a<b?b:a)voidmain(){intx=2;PRINT(x*FUDGE(2));for(intcel=0;cel<=100;cel+=50)PRINT2(cel,9.15*cel+32);intx=l,y=2;PRINT3(MAX(x++,y),x,y);PRINT3(MAX(x++,y),x,y):}16.#include<iostream.h>#defineN8voidmain(){voidprint(int);print(l):}voidprint(intn){cout<<"W";if(n>=N)return;elseprint(++n);}17.#include<iostream.h>#include<string.h>classstring{private;char*str;public;string(char*s);~string();voidprint();};classperson{private:stringname;intage:charsex;public;person(char*n,intage,chars);~person();voidprint();};string::string(char*s){str=newchar[strlen(s)+1];strcpy(str,s);cout<<"stringconstructor:"<<this->str<<endl;}string::~string(){cout<<"stringdestructor:"<<this->str<<endl;deletestr;}voidstring::print(){cout<<str;}person::person(char*n,inta,chars):name(n){age=a;sex=s;cout<<"personconstructor:"<<this->age<<endl;person::~person();cout<<"persondestructor:"<<this->age<<endl;}voidperson::print(){cout<<"name:":name.print();cout<<",age:"<<age<<",sex:"<<sex<<endl;}voidmain(){persona("zhong",20,'W');personb("li",10,"F");A.print();B.print();}18.#include<iostream.h>voidswapl(inta,intb){inttemp=a:a=b:b=temp;}voidswap2(int*a,int*b){inttemp=*a;*a=*b:*b=temp;)voidswap3(int*a,int*b){int*temp=a:a=b:b=temp;}voidswap4(int&a,int&b){inttemp=a;a=b;b=temp;}voidmain(){inta=10,b=20:swapl(a,b);cout<<a<<':'<<b<<endl;swap2(&a,&b);cout<<a<<':'<<b<<endl;swap3(&a,&b);cout<<a<<':'<<b<<endl;swap4(a,b);cout<<a<<':'<<b<<endl;}19.#include<iostream.h>#include<iomanip.h>voldprint(intw){inti;if(w!=0){print(w-1);for(i=1;j<=w:i++)cout<<setw(3)<<w:cout<<endl;}}voidmain(){print(4);}20.#include<iostream.h>#defineSW(x,y){x^=y;y^=x;x^=y;}voidmain(){inta=10,b=01;Sw(a,b);cout<<a<<','<<b;}四.完成下列程序1.静
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混合式教学 课程设计
- 湖北工业大学《现代电力电子技术》2023-2024学年期末试卷
- 湖北理工学院《移动通信技术》2022-2023学年期末试卷
- 湖北工业大学《大数据项目管理》2022-2023学年期末试卷
- 湖北工业大学《MaterialsandProcess》2023-2024学年期末试卷
- 课程设计教师对学生评语
- 儿童心理发展答辩报告模板
- 湖北第二师范学院《操作系统》2021-2022学年期末试卷
- 呼伦贝尔学院《Linux系统与网络》2021-2022学年期末试卷
- 食堂店长管理课程设计
- 学前儿童数学教育PPT全套教学课件
- 中小学校财务管理案例分析
- 《我们小点儿声》评课报告
- 比亚迪新能源汽车分析五力模型
- 面向双碳战略,打造物流企业零碳路线图 2023 -智慧货运中心 宋苏
- 教育信息处理教学分析第四章
- (完整版)全国各省份城市明细表
- 餐饮部服务流程演示文稿
- 周洁名园长工作室个人三年发展规划
- 2020-2022全国高考真题英语汇编:阅读理解A篇
- GB/T 32072-2015带传动抗静电同步带的导电性要求和试验方法
评论
0/150
提交评论