C++试题及答案-(五).pdf
《C++试题及答案-(五).pdf》由会员分享,可在线阅读,更多相关《C++试题及答案-(五).pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+C+试题及答案试题及答案-(-(五五)C+C+程序设计模拟试卷程序设计模拟试卷(五五)一、单项选择题一、单项选择题(本大题共本大题共2020小题,每小题小题,每小题1 1分,共分,共2020分分)在每小题列出的四个备选项中在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。分。1.1.静态成员函数没有()静态成员函数没有()A.A.返回值返回值B.B.thisthis指针指针C.C.指针参数指针参数D.D.返回类型返回类型答案:答案:B B解析:静态成员函数是普
2、通的函数前加入解析:静态成员函数是普通的函数前加入static,static,它具有函数的所有的特征:返回类型、它具有函数的所有的特征:返回类型、形参,所以使用静态成员函数,指针可以作为形参,也具有返回值。静态成员是类具有的形参,所以使用静态成员函数,指针可以作为形参,也具有返回值。静态成员是类具有的属性,不是对象的特征,而属性,不是对象的特征,而thisthis表示的是隐藏的对象的指针,因此静态成员函数没有表示的是隐藏的对象的指针,因此静态成员函数没有thisthis 指针指针。静态成员函数当在类外定义时,要注意不能使用。静态成员函数当在类外定义时,要注意不能使用staticstatic关键
3、字作为前缀。由于静态成员函数在关键字作为前缀。由于静态成员函数在类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。须通过参数传递的方式得到相应的对象,再通过对象来访问。2.2.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管在类的
4、定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是()理操作的函数是()A.A.友元函数友元函数B.B.虚函数虚函数C.C.构造函数构造函数D.D.析构函数析构函数答案:答案:C C解析:定义构造函数作用就是初始化对象,而析构函数释放对象空间。虚函数用于完成多解析:定义构造函数作用就是初始化对象,而析构函数释放对象空间。虚函数用于完成多态性,友元增加访问方便性。态性,友元增加访问方便性。3.3.所有在函数中定义的变量,都是()所有在函数中定义的变量,都是()A.A.全局变量全局变量B.B.局部变量局部变量C.C.静态变量静态变量D.D.寄存器变量寄存器变量答
5、案:答案:B B解析:变量存储类可分为两类:全局变量和局部变量。解析:变量存储类可分为两类:全局变量和局部变量。(1 1)全局变量:在函数外部定义的变量称为全局变量,其作用域为:从定义变量的位置开始)全局变量:在函数外部定义的变量称为全局变量,其作用域为:从定义变量的位置开始到源程序结束。全局变量增加了函数之间数据联系的渠道,全局变量作用域内的函数,均可使用到源程序结束。全局变量增加了函数之间数据联系的渠道,全局变量作用域内的函数,均可使用、修改该全局变量的值,但是使用全局变量降低了程序的可理解性,软件工程学提倡尽量避免使、修改该全局变量的值,但是使用全局变量降低了程序的可理解性,软件工程学提
6、倡尽量避免使用全局变量。用全局变量。(2 2)局部变量:在函数内部定义的变量称为局部变量,其作用域为:从定义变量的位置开始)局部变量:在函数内部定义的变量称为局部变量,其作用域为:从定义变量的位置开始到函数结束。局部变量包含自动变量(到函数结束。局部变量包含自动变量(autoauto)静态变量()静态变量(staticstatic)以及函数参数。)以及函数参数。autoauto变量意味着变量的存储空间的分配与释放是自动进行的。说明符变量意味着变量的存储空间的分配与释放是自动进行的。说明符autoauto可以省略。函数中可以省略。函数中的局部变量存放在栈空间。在函数开始运行时,局部变量被分配内存
7、单元,函数结束时,局部变的局部变量存放在栈空间。在函数开始运行时,局部变量被分配内存单元,函数结束时,局部变量释放内存单元。因此,任两个函数中的局部变量可以同名,因其占有不同的内存单元而不影响量释放内存单元。因此,任两个函数中的局部变量可以同名,因其占有不同的内存单元而不影响使用。这有利于实现软件开发的模块化。使用。这有利于实现软件开发的模块化。staticstatic变量是定义在函数体内的变量,存放在静态存储区,不用栈空间存储,其值并不随存变量是定义在函数体内的变量,存放在静态存储区,不用栈空间存储,其值并不随存储空间的释放而消失。储空间的释放而消失。4.4.假定假定ABAB为一个类,则执行
8、“为一个类,则执行“AB a(2),bAB a(2),b3 3,*p,*p4 4;”语句时调用该类构造函数的次数”语句时调用该类构造函数的次数为()为()A.A.3 3B.B.4 4C.C.5 5D.D.9 9答案:答案:B B解析:解析:a(2)a(2)调用调用1 1次带参数的构造函数,次带参数的构造函数,b b3 3调用调用3 3次无参数的构造函数,指针没有给它次无参数的构造函数,指针没有给它分配空间,没有调用构造函数。所以共调用构造函数的次数为分配空间,没有调用构造函数。所以共调用构造函数的次数为4 4。5.5.如果表达式如果表达式+a+a中的“中的“+”是作为成员函数重载的运算符,若采
9、用运算符函数调用格式,则”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为()可表示为()A.A.a.operator+(1)a.operator+(1)B.B.operator+(a)operator+(a)C.C.operator+(a,1)operator+(a,1)D.D.a.operator+()a.operator+()答案:答案:D D解析:运算符的重载,前缀先让变量变化。调用解析:运算符的重载,前缀先让变量变化。调用a a,等价为,等价为a.operator+(),a.operator+(),注意无参注意无参的形式。后缀的话的形式。后缀的话a+,a+,等价于等价
10、于a.operator(0),a.operator(0),带形参,形参名可省。带形参,形参名可省。6.6.已知已知f1f1和和f2f2是同一类的两个成员函数,但是同一类的两个成员函数,但f1f1不能直接调用不能直接调用f2f2,这说明(),这说明()A.A.f1f1和和f2f2都是静态函数都是静态函数B.B.f1f1不是静态函数,不是静态函数,f2f2是静态函数是静态函数C.C.f1f1是静态函数,是静态函数,f2f2不是静态函数不是静态函数D.D.f1f1和和f2f2都不是静态函数都不是静态函数答案:答案:C C解析:普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,这与普通解
11、析:普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,这与普通函数与常成员函数相同。因此选择函数与常成员函数相同。因此选择C C项。项。7.7.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为一个函数功能不太复杂,但要求被频繁调用,则应把它定义为()()A.A.内联函数内联函数B.B.重载函数重载函数C.C.递归函数递归函数D.D.嵌套函数嵌套函数答案:答案:A A解析:内联函数特征代码少,频繁调用,执行效率高。重载函数解决统一接口的问题;递解析:内联函数特征代码少,频繁调用,执行效率高。重载函数解决统一接口的问题;递归是子程序调用,程序调用要耗费很多空间和时间,循环归是子
12、程序调用,程序调用要耗费很多空间和时间,循环/迭代都比递归有效率得多,递归只是迭代都比递归有效率得多,递归只是从形式上,逻辑比较简洁。嵌套函数即反复调用,速度较慢。所以选择从形式上,逻辑比较简洁。嵌套函数即反复调用,速度较慢。所以选择A A项。项。8.8.解决定义二义性问题的方法有()解决定义二义性问题的方法有()A.A.只能使用作用域分辨运算符只能使用作用域分辨运算符B.B.使用作用域分辨运算符或成员名限定使用作用域分辨运算符或成员名限定C.C.使用作用域分辨运算符或虚基类使用作用域分辨运算符或虚基类D.D.使用成员名限定或赋值兼容规则使用成员名限定或赋值兼容规则答案:答案:B B解析:解决
13、二义性问题主要要两种方法:解析:解决二义性问题主要要两种方法:(1)(1)赋值兼容规则;赋值兼容规则;(2)(2)虚基类。虚基类。9.9.在在mainmain函数中可以用函数中可以用p.ap.a的形式访问派生类对象的形式访问派生类对象p p的基类成员的基类成员a a,其中,其中a a是()是()A.A.私有继承的公有成员私有继承的公有成员B.B.公有继承的私有成员公有继承的私有成员C.C.公有继承的保护成员公有继承的保护成员D.D.公有继承的公有成员公有继承的公有成员答案:答案:D D解析:公有成员可以在类外访问,保护类型成员可以在派生类中访问,但不能在类外访问解析:公有成员可以在类外访问,保
14、护类型成员可以在派生类中访问,但不能在类外访问,在,在mainmain函数中访问,说明函数中访问,说明a a是公有成员。只有公有继承时是公有成员。只有公有继承时a a才能是公有的,所以才能是公有的,所以D D项正确。项正确。10.10.在在C+C+中不返回任何类型的函数应该说明为()中不返回任何类型的函数应该说明为()A.A.intintB.B.charcharC.C.voidvoidD.D.doubledouble答案:答案:C C解析:无形参或无返回值都可以用解析:无形参或无返回值都可以用voidvoid来声明,来声明,int char doubleint char double分别是整型
15、、字符型和实型。分别是整型、字符型和实型。11.11.若若SampleSample类中的一个成员函数说明如下:类中的一个成员函数说明如下:void set(Sample&a)void set(Sample&a),则,则Sample&aSample&a的含义是()的含义是()A.A.指向类指向类SampleSample的名为的名为a a的指针的指针B.B.a a是类是类SampleSample的对象引用,用来作函数的对象引用,用来作函数SetSet()的形参()的形参C.C.将将a a的地址赋给变量的地址赋给变量SetSetD.D.变量变量SampleSample与与a a按位与的结果作为函数按
16、位与的结果作为函数SetSet的参数的参数答案:答案:B B解析:成员函数使用对象的引用作为形参。该函数的功能是将已知对象的所有数据成员的解析:成员函数使用对象的引用作为形参。该函数的功能是将已知对象的所有数据成员的值拷贝给相应对象的所有数据成员,不会建立临时对象,这里是对象的引用所以选择值拷贝给相应对象的所有数据成员,不会建立临时对象,这里是对象的引用所以选择B B。12.12.要实现动态联编必须()要实现动态联编必须()A.A.通过成员名限定来调用虚函数通过成员名限定来调用虚函数B.B.通过对象名来调用虚函数通过对象名来调用虚函数C.C.通过派生类对象来调用虚函数通过派生类对象来调用虚函数
17、D.D.通过对象指针或引用来调用虚函数通过对象指针或引用来调用虚函数答案:答案:D D解析:通过基类指针或基类引用来调用虚函数实现动态多态性,静态多态性通过重载来实解析:通过基类指针或基类引用来调用虚函数实现动态多态性,静态多态性通过重载来实现的。所以选择现的。所以选择D D项。项。13.13.在派生类中定义虚函数时,可以与基类中相应的虚函数不同的是()在派生类中定义虚函数时,可以与基类中相应的虚函数不同的是()A.A.参数类型参数类型B.B.参数个数参数个数C.C.函数名称函数名称D.D.函数体函数体答案:答案:D D解析:虚函数在基类和派生类,具有相同的返回类型、形参类型和形参个数,而函数
18、体可解析:虚函数在基类和派生类,具有相同的返回类型、形参类型和形参个数,而函数体可以根据不同的派生类或基类实现不同的操作,即不同函数体。以根据不同的派生类或基类实现不同的操作,即不同函数体。14.14.实现两个相同类型数加法的函数模板的声明是()实现两个相同类型数加法的函数模板的声明是()A.A.add(T x,T y)add(T x,T y)B.B.T add(x,y)T add(x,y)C.C.T add(T x,y)T add(T x,y)D.D.T add(T x,T y)T add(T x,T y)答案:答案:D D解析:实现两个相同类型数加法结果应该和操作数具有相同类型。进行加法运
19、算后结果也解析:实现两个相同类型数加法结果应该和操作数具有相同类型。进行加法运算后结果也是和参数具有相同类型,需要返回值。是和参数具有相同类型,需要返回值。A A无返回值时要用无返回值时要用void,Bvoid,B形参无类型,形参无类型,C C形参形参y y没有类型没有类型,所以选择,所以选择D D项。项。15.15.下列不是描述类的成员函数的是()下列不是描述类的成员函数的是()A.A.构造函数构造函数B.B.析构函数析构函数C.C.友元函数友元函数D.D.拷贝构造函数拷贝构造函数答案:答案:C C解析:友元函数虽然不是成员函数但是可以访问类所有成员。构造函数、析构函数和拷贝解析:友元函数虽
20、然不是成员函数但是可以访问类所有成员。构造函数、析构函数和拷贝构造函数构造函数(复制构造函数复制构造函数)都是类的特殊函数用于对象的创建和撤销,所以选择都是类的特殊函数用于对象的创建和撤销,所以选择C C项。项。16.16.继承机制的作用是()继承机制的作用是()A.A.信息隐藏信息隐藏B.B.数据封装数据封装C.C.定义新类定义新类D.D.数据抽象数据抽象答案:答案:C C解析:面向对象设计中的类的特点:抽象、封装、继承和多态等,继承用于对类的扩展解析:面向对象设计中的类的特点:抽象、封装、继承和多态等,继承用于对类的扩展,所以选择,所以选择C C项。项。17.17.已知:已知:p p是一个
21、指向类是一个指向类A A数据成员数据成员m m的指针,的指针,A1A1是类是类A A的一个对象。如果要给的一个对象。如果要给m m赋值为赋值为5 5,正确,正确的是()的是()A.A.A1.p=5;A1.p=5;B.B.A1-p=5;A1-p=5;C.C.A1.*p=5;A1.*p=5;D.D.*A1.p=5;*A1.p=5;答案:答案:C C解析:解析:A A中中p p是指针即地址,错误;是指针即地址,错误;B B选项中选项中A1A1不是指针不能使用指向运算符不是指针不能使用指向运算符-,-,错误错误;“;“*”比“”比“.”级别要高,所以”级别要高,所以D D选项选项*A1.p=5*A1.
22、p=5相当于相当于(*A1).p=5;(*A1).p=5;错误。另外涉及到指向成员函数错误。另外涉及到指向成员函数时注意以下几点:时注意以下几点:指向成员函数的指针必须于其赋值的函数类型匹配的三个方面:指向成员函数的指针必须于其赋值的函数类型匹配的三个方面:(1)(1)参数类型和个数;参数类型和个数;(2)(2)返回返回类型;类型;(3)(3)它所属的类类型。它所属的类类型。成员函数指针的声明:指向成员函数指针的声明:指向shortshort型的型的ScreenScreen类的成员的指针定义如下:类的成员的指针定义如下:short Screen:*ps_Screen;short Screen:
23、*ps_Screen;ps_Screenps_Screen可以用可以用_height_height的地址初始化如下:的地址初始化如下:short Screen:*ps_Screen=&Screen:_height;short Screen:*ps_Screen=&Screen:_height;类成员的指针必须总是通过特定的对象或指向改类型的对象的指针来访问。是通过使用两个指类成员的指针必须总是通过特定的对象或指向改类型的对象的指针来访问。是通过使用两个指向成员操作符的指针向成员操作符的指针(针对类对象和引用的针对类对象和引用的.*.*,以及针对指向类对象的指针的,以及针对指向类对象的指针的-*
24、)-*)。18.18.如果采用动态多态性,要调用虚函数的是()如果采用动态多态性,要调用虚函数的是()A.A.基类对象指针基类对象指针B.B.对象名对象名C.C.基类对象基类对象D.D.派生类名派生类名答案:答案:A A解析:基类指针或者基类的引用调用虚函数都会产生动态多态性解析:基类指针或者基类的引用调用虚函数都会产生动态多态性19.19.若有以下定义,则说法错误的是()若有以下定义,则说法错误的是()int a=100,*p=&a;int a=100,*p=&a;A.A.声明变量声明变量p p,其中,其中*表示表示p p是一个指针变量是一个指针变量B.B.变量变量p p经初始化,获得变量经
25、初始化,获得变量a a的地址的地址C.C.变量变量p p只可以指向一个整型变量只可以指向一个整型变量D.D.变量变量p p的值为的值为100100答案:答案:D D解析:指针变量如同其他变量一样,在使用之前必须先声明。声明指针变量的格式为:解析:指针变量如同其他变量一样,在使用之前必须先声明。声明指针变量的格式为:*;其中,其中,是指针变量所指向对象的类型,它可以是是指针变量所指向对象的类型,它可以是C+C+语言预定义的类型,也可以是用户语言预定义的类型,也可以是用户自定义类型。自定义类型。是用户自定义的标识符。符号是用户自定义的标识符。符号*表示表示 是指针变量。而不是普通变量是指针变量。而
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 试题 答案
限制150内