级本科班C++复习题本科.docx

上传人:b****3 文档编号:4953575 上传时间:2023-05-07 格式:DOCX 页数:22 大小:25.45KB
下载 相关 举报
级本科班C++复习题本科.docx_第1页
第1页 / 共22页
级本科班C++复习题本科.docx_第2页
第2页 / 共22页
级本科班C++复习题本科.docx_第3页
第3页 / 共22页
级本科班C++复习题本科.docx_第4页
第4页 / 共22页
级本科班C++复习题本科.docx_第5页
第5页 / 共22页
级本科班C++复习题本科.docx_第6页
第6页 / 共22页
级本科班C++复习题本科.docx_第7页
第7页 / 共22页
级本科班C++复习题本科.docx_第8页
第8页 / 共22页
级本科班C++复习题本科.docx_第9页
第9页 / 共22页
级本科班C++复习题本科.docx_第10页
第10页 / 共22页
级本科班C++复习题本科.docx_第11页
第11页 / 共22页
级本科班C++复习题本科.docx_第12页
第12页 / 共22页
级本科班C++复习题本科.docx_第13页
第13页 / 共22页
级本科班C++复习题本科.docx_第14页
第14页 / 共22页
级本科班C++复习题本科.docx_第15页
第15页 / 共22页
级本科班C++复习题本科.docx_第16页
第16页 / 共22页
级本科班C++复习题本科.docx_第17页
第17页 / 共22页
级本科班C++复习题本科.docx_第18页
第18页 / 共22页
级本科班C++复习题本科.docx_第19页
第19页 / 共22页
级本科班C++复习题本科.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

级本科班C++复习题本科.docx

《级本科班C++复习题本科.docx》由会员分享,可在线阅读,更多相关《级本科班C++复习题本科.docx(22页珍藏版)》请在冰点文库上搜索。

级本科班C++复习题本科.docx

级本科班C++复习题本科

C++练习题

一、选择题

1、下列关键字中,()不是类定义中使用的关键字。

A.classB.publicC.switchD.private

2、下面对于友元函数描述正确的是()。

A.友元函数的实现必须在类的内部定义

B.友元函数是类的成员函数

C.友元函数破坏了类的封装性和隐藏性

D.友元函数不能访问类的私有成员

3、主函数可以访问派生类的对象中它的哪一类基类成员?

()

A.公有继承的基类的公有成员

基类的公有成员,在公有继承下,仍然是公有的,可以在类外访问

B.公有继承的基类的保护成员

基类的保护成员,在公有继承下,仍然是保护的,不可以在类外访问

C.公有继承的基类的私有成员

基类的私有成员,在公有继承下,仍然是私有的,不可以在类外访问

D.保护继承的基类的公有成员

基类的公有成员,在保护继承下,变成保护的,不可以在类外访问

4、定义重载函数的下列条件中,()是错误的。

A.要求参数个数不同;B.要求参数类型不同;

C.要求函数返回值类型不同;D.要求在参数个数相同时,参数类型的顺序不同。

5、下列函数中,()不能重载。

A.成员函数B.非成员函数

C.构造函数D.析构函数

6、下列构造函数的特点中,()是错误的。

A.构造函数具有一般成员函数的特点;

B.构造函数的名称与其类名相同;C.构造函数必须指明其类型;构造函数是没有返回值,更谈不上返回值的类型D.一个类中可定义1个或多个构造函数。

7、关于成员函数特征的下述描述中,( )是错误的。

A.成员函数必须要写在类的内部B.成员函数可以重载;

C.成员函数可以设置参数的缺省值;D.成员函数可以是静态的。

8、C++语言的基本数据类型包括()。

A.整型、实型、逻辑型、空型

B.整型、实型、字符型、空型

C.整型、字符型、逻辑型、空型

D.整型、实型、指针型、字符型

9、下列关于指针的运算中,()是非法的。

A.两个指针在一定条件下,可以进行相等或不等的运算;

B.可以用一个空指针赋值给某个指针;

C.一个指针可以加上两个整数之差;

D.两个指针在一定条件下,可以相加。

10、在C++中,关于下列设置缺省参数值的描述中,正确的是()。

A.不允许设置缺省参数值;

B.在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;

C.只能在函数的定义中指定参数的缺省值;

D.设置缺省参数值时,必须全部都设置。

11、预处理命令在程序中是以()开头的。

A.*B.#C.:

D./

12、按照标识符的要求,()符号不能组成标识符。

A.-B._C.大小写字母D.数字字符

13、假定a为一个数组名,则下面的哪一种表示有错误。

()

A.a[i]B.*(a+1)C.*aD.*a++

*与++优先级相同,结合方向是右结合,但是a++是后缀形式,所以先执行*a取出a中的值,然后,让指针a自加,即:

向下移动一位。

数组名是首地址不错,但是数组名是个常量,常量不可以自加。

比如:

5++,在C、C++中都是错误的。

14、关于delete运算符的下列描述中,错误的是()。

A.它必须用于new返回的指针;

B.使用它删除对象时要调用析构函数;

C.对一个指针可以使用多次该运算符;

默认的拷贝构造函数就是浅拷贝,对一个指针删除了两次,是不对的。

D.指针名前只有一对方括号符号,不管所删除数组的维数。

15、下列对派生类的描述中,()是错误的。

A.一个派生类可以作为另一个派生类的基类;

B.派生类至少应有一个基类;

C.基类中成员的访问权限被派生类继承后都不改变;

继承有三种方式,public,private,protected,不同的继承方式,导致基类成员的访问权限发生变化。

D.派生类的成员除了自己定义的成员外,还包含了它的基类成员。

16、下列关于this指针的说法,哪个是正确的()。

A.this指针一定指向常量型数据B.this指向的数据不可更改

C.静态成员函数可以访问this指针D.this指针本身可作为成员函数的返回值。

17、在c++语言中,要求参加运算的数必须是整数的运算符是()。

A./B.!

C.%D.==

18、类A中有唯一的一个成员函数f,且f是公有的静态或非静态成员函数,对于类A的一个对象a,执行语句a.f(100);成功,那么f的函数原型不可以是()。

A.A&f(int,int=50)B.voidf(int&)

C.constA*f(constint)D.Af(constint&)

constintttt=100;constint&sss=ttt;这样是可以的。

constintttt=100;int&sss=ttt;这样是不行的。

引用对象src与引用结果dst必须保持修饰符一致,引用也就是对象的别名

19、执行C++程序时出现的“溢出”属于()错误。

A.运行B.链接C.编译D.逻辑

20、下列关于引用的说法错误的是()。

A.不能声明一个指针的引用;指针也是可以有引用的。

B.引用必须在定义的同时进行初始化;

C.返回引用的函数,可以作为左值被调用;

D.使用引用参数,可以实现将实参的地址传递给行参。

21、inti,int*constp=&i,说明不能修改()。

A.p指针的指向;

int*constp说明p是指针常量,说明指针的指向不可发生改变,所以不能改变p指针的指向。

但是通过p可以间接改变变量i的值。

B.p指针指向的变量;

C.i的值;

D.上述A、B、C三者。

22、下面的函数声明中,()是”voidBC(inta,intb);”的重载函数?

A.intBC(inta,intb)B.voidBC(inta,charb)

C.floatBC(inta,intb,intc=0)D.voidBC(inta,intb=0)

integer与char类型,在一定范围内是通用的,在0-255之间。

23、下列静态数据成员的特性中,错误的是()。

A.说明静态数据成员时前边要加修饰符static;一定要有

B.引用静态数据成员时,必须用类名和作用域运算符引导;使用对象名也可以的

C.静态数据成员是所有对象所共用的;

D.静态数据成员要在类的定义之外进行初始化。

24、判断字符串s1和s2是否相等的表达式为()。

A.s1=s2B.s1==s2

C.strcpy(s1,s2)==0D.strcmp(s1,s2)==0

25、若用数组名作为调用函数的实际参数,则传递给形式参数的是()。

A.数组存储首地址;

B.数组的第一个元素值;

C.数组中全部元素的值;

D.数组元素的个数。

26、在C++程序中使用的cin标识符是系统类库中定义的()类中的一个对象。

A.istreamB.ostreamC.iostreamD.fstream

27、在下列各函数中,不是类的成员函数的是()。

A.构造函数B.析构函数C.友元函数D.拷贝构造函数

28、假定AA是一个类,abc()是该类的一个成员函数(memberfunction),则参数表中隐含的第一个参数为()。

A.abcB.*thisC.thisD.this&

29、类中定义的成员默认为()访问属性。

A.publicB.privateC.protectedD.friend

30、假定AB为一个类,则执行“ABx;”语句时将自动调用该类的()。

A.带参构造函数B.无参构造函数

C.拷贝构造函数D.赋值重载函数

31、对于派生类的构造函数,在定义对象时构造函数的执行顺序为:

()。

①基对象的构造函数

③派生类(BaseClass)的构造函数

②成员类(DerivedClass)本身的构造函数

A.③②①B.③①②C.①③②D.①②③

32、如果一个类中,至少有一个纯虚函数(Purevirtualfunction),那么称该类为()。

A.抽象类B.虚基类C.派生类D.以上都不对

33、设置虚基类的目的是()。

A.简化程序B.提高运行效率C.消除二义性D.减少目标代码

34、要使语句“p=newint[5][12];”能够正常执行,p应定义为()。

A.int*p;B.int**p;C.int*p[12];D.int(*p)[12];

35、下面关于类的成员函数描述不正确的是()。

A.静态成员函数内可以直接访问类的非静态成员数据

B.静态成员函数内可以直接访问类的静态成员数据

C.非静态成员函数可以直接访问类的非静态成员数据

D.非静态成员函数可以直接访问类的静态成员数据

36、关于纯虚函数和抽象类的描述中,不正确的是()。

A.纯虚函数有函数实体,即有函数定义B.抽象类不能创建其对象

C.纯虚函数只有原型说明D.抽象类是含有纯虚函数的类

37、当派生类中有内嵌(即组合)对象时,派生类构造函数的执行顺序是()。

A.先基类,后派生类,最后内嵌(即组合)对象

B.先内嵌(即组合)对象,后基类,最后派生类

C.先派生类,后基类,最后内嵌(即组合)对象

D.先基类,后内嵌(即组合)对象,最后派生类

38、关于类和对象的描述,下列说法正确的是()。

A.类的成员函数的定义和类的定义不能分开写。

B.成员函数代码中,所有涉及对类的数据成员的操作都隐含了参数*this。

C.静态的成员函数不可以使用对象名调用。

D.一个类中可以定义多个构造函数,而且所有的构造函数都将被执行。

39、下列对派生类的描述中,()是错误的。

A.一个派生类可以作为另一个派生类的基类

B.派生类至少应有一个基类;

C.基类中成员的访问权限被派生类继承后都不改变

D.派生类的成员除了自己定义的成员外,还包含了它的基类成员

40、给出以下定义:

charx[]="abcdefg";

chary[]={'a','b','c','d','e','f','g'}; 则正确的叙述为()。

A.数组x和数组y等价B.数组x和数组y的长度相同

C.数组x的长度大于数组y的长度D.数组x的长度小于数组y的长度

41、若有语句inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则()不是对a数组元素的正确引用(其中0≤i<10)。

A.p[i]   B.*(*(a+i))C.a[p-a]D.*(&a[i])

42、执行以下程序段后,m的值为()。

inta[2][3]={{1,2,3},{4,5,6}};intm,*p=&a[0][0];m=(*p)*(*(p+2))*(*(p+4));

A.15B.14C.13D.12

43、函数重载的意义主要在于()。

 

A.使用方便,提高可读性B.提高执行效率

C.减少存储空间开销D.提高程序可靠性

44、假定AB为一个类,则执行“ABa,b(3),*p;”语句时共调用该类构造函数的次数为()。

A.1B.2C.3D.4

45、假定AB为一个类,则执行“ABx;”语句时将自动调用该类的()。

A.带参构造函数B.无参构造函数

C.拷贝构造函数D.赋值重载函数

二、填空题

1、假定一个二维数组的定义为inta[4][5],则该数组所含元素的个数为__20__。

2、预处理命令在程序中都是以____#___开头的。

3、执行cout<

4、面向对象系统最突出的特征是__封装____性、__继承__性和多态性。

5、设有complexc1;用c1对c2进行初始化有两种方式

(1)复制初始化_________

(2)复制初始化_________。

6、C++源程序经过__编译____和__链接___后生成可执行程序。

先编译,然后才是链接

7、使用标准的输入流cin时,两个输入项之间用___>>___分隔。

8、类中的对象成员、_________和_________的初始化只能通过初始化参数表的形式进行初始化。

9、C++中不可以重载的运算符有“.”、“.*”、_________和_________。

10、运算符的重载一般采用两种方式:

重载为_________和_________。

11、使用“int*pa=newint[10];”定义一个有10个元素的整型数组,使用__

delete[]pa;______释放pa指针指向的数组。

12、C++程序的内存格局通常分为四个区:

__代码区______,该区用来存放类成员函数、其它函数代码;__全局数据区______,该区用来存放全局变量、静态数据、常量;_栈区______,该区用来存放局部变量、函数参数、返回数据和返回地址;__堆区______,该区是自由存储区。

13、设置虚基类的目的是_________。

14、类外部可以用p.a的形式访问派生类对象p的基类成员a,则a应是_________。

公有继承的公有成员

15、若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加上_________和_________。

16、函数不能将_________作为引用返回。

自动变量

三、判断题

1、类的成员函数都应是公有的,而数据成员都应是私有的。

2、用class定义的类中,默认的访问权限是公有的。

错,用struct封装的结构体类型中,默认的访问权限才是公有的

3、运算符new可以创建变量或对象,也可以创建数组。

4、派生类不能再派生新的类。

错,可以继续派生下去。

5、在公有继承中,派生类对象的成员函数可以访问基类中的私有成员。

错,只能访问基类中的公有成员。

6、运算符重载可以改变其结合性。

7、函数参数个数和类型都相同,只是返回值类型不同,这不是重载函数。

8、C++中的模板分为函数模板和类模板两种。

9、constint*p说明不能修改p指针。

错,可以的。

但是不能利用p指针间接修改所指的内存变量中的值。

10、一个类的所有公共成员信息构成了它对外界的接口。

对,公共的成员函数就是interface

11、在C++中,China和china将被视作两个不同的变量。

对,C++对大小写敏感

12、定义对象引用时,系统会自动调用对应类的构造函数。

错,定义对象的引用,只是给同一个对象另外起一个别名,不是新创建一个对象,所以不会调用构造函数

13、static关键字可以延长局部变量的生存期。

对,局部变量的生存周期只在定义该变量的函数内部。

出了该函数的范围,则自动消失。

但使用static进行修饰后,则生存周期变成整个程序的运行周期。

14、static关键字可以扩大全局变量的作用域。

(应该是缩小了)

15、C++允许使用友元,但是友元会破坏封装性。

16、友元函数可以通过使用this指针直接访问类的私有成员。

错,

友元函数是非成员函数,所以它无法通过this指针获得一份拷贝,因此必须给友元函数传递一个对象变量,这一点和其他非成员函数是一样的,不同的是友元函数可以访问类的私有数据。

17、类的成员可以全部为私有的,也可以全部为公共的,或者一部分为私有、一部分为公共的。

对,但是全部为私有的话,无法进行访问类的成员。

全部为公有的话,失去类的封装性。

常规的做法是:

成员定义为私有的,成员函数定义为公有的,若需要作为基类被继承,也可以出现受保护的定义。

18、定义一个对象时,系统只存储其数据成员而不用存储成员函数。

对,书上原话

19、字符串”hello,world”在内存中存放时,共占用11个字节的空间。

错,还有个’\0’

20、参数的缺省值只能在函数的定义性声明中指定。

错,在函数声明中也可以指定

21、break语句和continue语句都只能用在循环语句中。

错,break可以用在switchcase结构中,也可以用在循环中,continue语句只能用在循环结构中

22、多态的实现需要迟后联编机制的支持。

四、简答题

1、为什么要引入构造函数和析构函数?

构造函数的作用是为类对象的数据成员赋初值,构造函数在定义类对象时由系统自动调用;在一个对象死亡或者说退出生存期时,系统会自动调用析构函数,因此可以在析构函数定义中,设置语句释放该对象所占用的一些资源。

2、什么时候需要自定义复制构造函数?

若程序员没有定义复制构造函数,则编译器自动生成一个默认的复制构造函数,它可能会产生什么问题?

当有用一个已经存在对象创建一个同类型的新对象的需求时。

当对象含有指针数据成员,并用它初始化同类型的另一个对象时,默认的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。

这样,就可能出现同一内存单元释放两次,导致程序运行出错。

3、什么叫虚基类?

有什么作用?

在C++中,如果在多条继承路径上有一个公共的基类,在这些路径汇总的某几条路径的汇合处,这个公共的基类就会产生多个实例。

如果想使这个公共的基类只产生一个实例,采用虚拟继承将这个基类说明为虚基类。

虚基类的作用是消除二义性。

4、什么是多态性,C++中多态有哪几种?

多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。

C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中主要的方式。

5、简述C++程序开发的步骤。

⑴分析问题。

根据实际问题,分析需求,确定解决方法,并用适当的工具描述它。

⑵编辑程序。

编写C++源程序,并利用一个编辑器将源程序输入,保存到计算机中的某一个文件中。

文件的扩展名为.cpp。

⑶编译程序。

编译源程序,产生目标程序。

目标程序文件的扩展名为.obj。

⑷连接程序。

将一个或多个目标程序与库函数进行连接后,产生一个可执行文件。

可执行文件的扩展名为.exe。

⑸运行调试程序。

运行可执行文件,分析运行结果。

若有错误进行调试修改。

重复以上过程,直到得到正确的结果为止

6、什么是内联函数?

有什么特点?

使用时应注意什么。

在类型前用关键字inline可以将函数声明为内联函数。

特点:

将函数体代码直接插入到函数调用处,节省函数的调用时间开销。

注意:

内联函数中不能有静态变量,不能有复杂的流程控制,不能递归,不能有数组。

7、什么是堆对象?

创建和回收堆对象的方法是什么。

在内存中有堆区:

用来存放程序运行期间,根据需要随时创建的变量(对象),建立在堆区的对象称为堆对象。

创建和回收的方式是:

使用NEW和DELETE运算符。

8、什么是虚基类?

有什么作用?

在C++中,如果在多条继承路径上有一个公共的基类,在这些路径汇总的某几条路径的汇合处,这个公共的基类就会产生多个实例。

如果想使这个公共的基类只产生一个实例,采用虚拟继承将这个基类说明为虚基类。

虚基类的作用是消除二义性。

9、什么是抽象类?

有什么作用?

具有纯虚函数的类称为抽象类。

一个抽象类至少具有一个纯虚函数。

作用:

在基类中如果无法定义有具体意义的函数,可以定义成抽象类,然后在派生类中给出该函数的重载,称为具体类,就可以创建具体对象,从而创建处有意义的函数。

10、复制构造函数在哪几种情况下被系统自动调用?

11、友元函数可以提高程序的访问效率,但是破坏了类的封装性,在使用友元函数时需要注意哪些情况?

12、什么是虚函数,虚函数在使用中有什么限制?

13、什么时候需要自定义复制构造函数?

若程序员没有定义复制构造函数,则编译器自动生成一个默认的复制构造函数,它可能会产生什么问题?

14、什么叫虚基类?

有什么作用?

15、什么是多态性,C++中是如何实现多态的?

16、在C++中能否声明虚构造函数,为什么?

能否声明虚析构函数,有什么作用?

五、阅读程序题

1、写出该程序执行结果。

#include

usingnamespacestd;

classA

{

public:

A(){cout<<"执行构造函数创建一个对象\n";}

A(A&){cout<<"执行复制构造函数创建对象的副本\n";}

~A(){cout<<"执行析构函数删除该对象\n";}

};

Afunc(Aone)

{

returnone;

}

intmain()

{Aa;

func(a);

return0;

}

2、写出该程序执行结果。

#include

classMyClass

{

public:

MyClass(){x=0;}

MyClass(intx,inty){this->x=x;this->y=y;}

intGetNumX(MyClassmy);

intGetNumY(MyClassmy);

private:

intx,y;

};

intMyClass:

:

GetNumX(MyClassmy)

{returnmy.x;}

intMyClass:

:

GetNumY(MyClassmy)

{returnmy.y;}

voidmain()

{

MyClassm1,m2(3,15);

cout<<"m1.x="<

cout<<"m2.x="<

cout<<"m2.y="<

}

3、写出该程序执行结果。

#include

classSample

{

public:

Sample();

Sample(int);

~Sample();

voiddisplay();

protected:

intx;

};

Sample:

:

Sample()

{x=0;cout<<"constructingnormally\n";}

Sample:

:

Sample(intm)

{x=m;cout<<"constructingwithanumber:

"<

voidSample:

:

display()

{cout<<"displayanumber:

"<

Sample:

:

~Sample()

{cout<<"destructing\n";}

voidmain()

{

Sampleobj1;//调用无参构造函数

Sampleobj2(20);//调用有一个参数的构造函数

obj1.dis

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2