C++习题
第7章类的基本概念
⼀、选择题
1、以下不属于类存取权限是___________。
A) public B) static
C) protected D) private
【解答】答案:B,ACD均为类访问修饰符,B是普通的修饰符。
2、类的析构函数是___________时调⽤的。
指向类成员函数的指针A) 类创建B) 创建对象
C) 引⽤对象D) 释放对象
【解答】答案:D,析构函数功能是释放对象,收回资源。
3、有关构造函数的说法,不正确的是___________。
A) 对象是类的⼀个实例B) 任何⼀个对象只能属于⼀个具体的类
C) ⼀个类只能有⼀个对象
D) 类与对象的关系和数据类型与变量的关系相似
【解答】答案:C ,⼀个类可以创建多个对象。
4、通常拷贝构造函数的参数是___________。
A) 某个对象名B) 某个对象的成员名
C) 某个对象的引⽤名D) 某个对象的指针名
【解答】答案: C ,构造函数的参数是类本⾝的引⽤。
5、假定A是⼀个类,那么执⾏语句“A a, b(3), *p;”调⽤了___________次构造函数。
A) 2 B) 3
C) 4 D) 5
【解答】答案:A,其中*p并没有调⽤构造函数,只有使⽤new以后,才创建对象。
⼆、填空题
1、假定DD是⼀个类,则执⾏“DD a[10], b(2)”语句时,系统⾃动调⽤该类构造函数的次数为___________
【解答】答案:11次
2、对于任意⼀个类,析构函数的个数最多为___________个。
【解答】答案:1
3、⼀个类的___________函数通常⽤于实现释放该类对象中指针成员所指向的动态存储空间的任务。
【解答】答案:析构函数
4、C++程序的内存格局通常分为四个区:(1)___________,该区⽤来存放全局变量、静态数据、常量。
(2)___________,该区⽤来存放类成员函数、其他函数代码。(3)
___________该区⽤来存放局部变量、函数参数、返回数据和返回地址。(4)___________。该区是⾃由存储区。【解答】答案:全局数据区(data area) 代码区(code area) 栈区(stack area) 堆区(heap area)
三、简答题与程序设计题
1、简述3种访问修饰符对类成员的访问限制。
【解答】答案:C++语⾔通过访问限定符public、private和protected将类成员分成三类:公有成员、私有成员和保护成员。
●公有成员(public修饰)可以被该类的成员函数访问,也可以在程序的任意地⽅
被任意访问。
●私有成员(private修饰)只能被该类的成员函数或者该类的友元函数访问。友元
是为了增加程序的灵活性⽽引⼊的概念,允许程序中的某些函数访问类中的私有
成员。
●保护成员(protected)对于派⽣类来说,就像是公有成员,可以被访问,对于程
序的其他部分来说,就像是私有成员,不允许被访问。
2、定义⼀个学⽣类,输⼊学⽣的姓名、语⽂成绩、数学成绩和英语成绩,计算并输出每位学⽣的各门功课的成绩、总成绩和平均成绩。
【解答】思路:设计⼀个类,类的数据成员包括姓名、语⽂成绩、数学成绩和英语成绩。类的成员函数包括算总成绩、算平均成绩和输出各门功能的成绩。
3、简述拷贝构造函数的必要性。
【解答】答案:当⽤⼀个对象值初始化⼀个新对象的时候,或者利⽤⼀个对象构造另⼀个对象的时候,要涉及到对象的拷贝,⽐如执⾏语句“person p1 = p2”或者“person
p1(p2)”。这个时候p1和p2指向堆的同⼀内存空间,当p1调⽤析构函数释放堆空间以后,这个时候p2指向的地址变空了,如果p2再调⽤析构函数释放内存空间,将会出错。如图7-1所⽰。
图7-1 使⽤对象赋值
⼀、选择题
1、在C++中可以把具有相同内部存储结构和相同操作的对看成属于同⼀类。在指定⼀个类后,往往把属于这个类的对象称为类的___________
A)实例B)实物
C)特征D)对象
【解答】答案:A,使⽤类创建出来的数据类型,称之为类的实例。
2、有关类的说法不正确的是___________.
A)类是⼀个⽤户⾃定义的数据类型
B)只有类中的成员函数才能存取类中的私有数据
C)在类中,如果不作特别说明,所有的数据均为私有类型
D)在类中,如果不作特别说明,所有的成员函数均为公有类型
【解答】答案:D ,如果不特别说明,所有成员均为私有类型。
4、有关类和对象的说法下列不正确的有___________
A) 对象是类的⼀个实例B)任何⼀个对象只能属于⼀个具体的类
C)⼀个类只能有⼀个对象D)类与对象和关系和数据类型和变量的关系相似【解答】答案:C,⼀个类可以创建多个对象。
5、有关构造函数的说法不正确的是___________
A) 构造函数名字和类的名字⼀样B)构造函数在说明类变量时⾃动执⾏
C)构造函数⽆任何函数类型D)构造函数有且只有⼀个
【解答】答案:D ,构造函数可以重载,可以有多个。
6、有关析构函数的说法不正确的是___________
A)析构函数有且只有⼀个B)析构函数⽆任何函数类型
C)析构函数和构造函数⼀样可以有形参
D)析构函数的作⽤是在对象被撤消时收回先前分配的内存空间
【解答】答案:C ,析构函数没有形参。
7、在类的定义体外定义成员函数时,需要在函数名前加上___________
A)类标记B)类域标记
C)类对象D)域运算符
【解答】答案:B,需要加上类域运算符“::”。
8、在类的定义形式中,数据成员、成员函数和___________组成了类。
A)成员的访问控制信息B)公有信息
C)私有信息D)保护信息
【解答】答案:A,类的成员控制信息,也就是访问修饰符。
9、___________功能是对对象进⾏初始化
A)析构函数B)数据成员
C)构造函数D)静态成员函数
【解答】答案:C,构造函数的功能是初始化。
第8章静态成员与友元
⼀、选择题
1、关于静态数据成员,下⾯说法错误的是___________。
A) 使⽤静态数据成员,实际上是为了消除全局变量。
B) 可以使⽤“对象名.静态成员”或者“类名::静态成员”来访问静态数据成员。
C) 静态数据成员只能在静态成员函数中引⽤。
D) 所有对象的静态数据成员占⽤同⼀内存单元。
【解答】答案:C,静态成员函数只能引⽤静态数据成员,但是静态数据成员可以在任意地⽅使⽤。
2、下⾯的函数中,静态成员函数不能访问的是___________
A) 静态数据成员B) 静态成员函数
C) 类以外的函数和数据D) ⾮静态数据成员
【解答】答案:D,静态成员函数不能访问⾮静态数据成员。
3、在类的定义中,引⼊友元的原因是___________
A) 提⾼效率B) 深化使⽤类的封装性
C) 提⾼程序的可读性D) 提⾼程序的可读性
【解答】答案:A ,友元的⽬的之⼀是提⾼编写效率。
4、友元类的声明⽅法是:___________
A) friend class <;类名>; B) youyuan class <;类名>;
C) class friend <;类名>; D) friends class <;类名>
【解答】答案:A,只有A是合法的友元定义⽅式。
⼆、填空题
1、数据定义为全局变量,破坏了数据的___________;较好的解决办法是将所要共享的数据定义为类的___________。【解答】答案:封装性静态成员
2、静态数据成员和静态成员函数可由___________函数访问
【解答】答案:任意访问权限许可的
3、___________和___________统称为友元
【解答】答案:友元函数友元类
4、友元的正确使⽤能提⾼程序___________,但破坏了类的封装性和数据的隐蔽性
【解答】答案:的运⾏效率
三、简答题和程序设计题
1、简述静态数据成员和普通数据成员的区别和联系。静态成员函数与普通成员函数
的区别和联系。
【解答】答案:静态数据成员不从属于任何⼀个具体对象,所以必须对它初始化,且对它的初始化不能在构造函数中进⾏,类中⽤关键字static修饰的数据成员叫做静态数据成员。
静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的⾮静态数据成员,因为⾮静态数据成员只有对象存在时才有意义。但静态数据成员和静态成员函数可由任意访问权限许可的函数访问。
2、简述C++语⾔引⼊友元的原因。
【解答】答案:有时候,普通函数需要直接访问⼀个类的保护或私有数据成员。普通函数需要直接访问
类的保护或者私有数据成员的原因主要是为提⾼效率。在类⾥声明⼀个普通函数,加上关键字friend,就成了该类的友元,可以访问该类的⼀切成员。
3、改写程序proj8_04.cpp,不⽤友元实现程序功能。
【解答】答案:需要将友元部分分别放到类中。
4、改写程序proj8_05.cpp,使⽤友元函数实现该程序的功能。
【解答】答案:将公⽤的部分拿到⼀个类中,然后定义成另⼀个类的友元。
⼀、选择题
1、___________只能访问静态成员变量,静态成员函数和类以外的函数和数据不能访问类中的⾮静态成员变量
A)静态函数B)虚函数
C)构造函数D)析构函数
【解答】答案:A,静态成员函数只能访问静态成员变量。
2、局部变量可以隐藏全局变量,那么在有同名全局变量和局部变量的情形是,可以⽤___________提供对全局变量的访问。
A)域运算符B)类运算符
C)重载D)引⽤
【解答】答案:A,使⽤域运算符可以限制访问类内部的成员。
3、在下列关键字中,⽤以说明类中公有成员的是___________
A)public B)private
C)protected D)friend
【解答】答案:A,public修饰的成员是公有的。
4、下列的各类函数中,___________不是类的成员函数.
A)构造函数B)析构函数
C)友元函数D)拷贝初始化构造函数
【解答】答案:C,其中ABD均是成员函数,C不是。
5、___________不是构造函数的特征
A) 构造函数的函数名与类名相同B)构造函数可以重载
C)构造函数可以设置默认参数D)构造函数必须指定类型说明
【解答】答案:D,构造函数没有类型说明。
6、___________是析构函数的特征
A)⼀个类中只能定义⼀个析构函数B)析构函数名与类名不同
C)析构函数的定义只能在类体内D)析构函数可以有⼀个或多个参数
【解答】答案:A,析构函数只能有1个。
7、通常拷贝初始化构造函数的参数是___________
A)某个对象名B)某个对象的成员名
C)某个对象的引⽤名D)某个对象的指针名
【解答】答案:C,拷贝构造函数的参数是当前类的引⽤。
8、关于成员函数特征的下述中,___________是错误的。
A)成员函数⼀定是内联函数B)成员函数可以重载
C)成员函数可以设置参数的默认值D)成员函数可以是静态的
【解答】答案:A ,成员不⼀定是内联函数。
9、下述静态数据成员的特征中,___________是错误的。
A)说明静态数据成员时前边要加修饰符static
B)静态数据成员要在类体外进⾏初始化
C)引⽤静态数据成员时,要在静态数据成员名前加<;类名>和作⽤域运算符
D)静态数据成员不是所有对象所共⽤的
【解答】答案:D,静态数据成员是所有对象共有的。
10、从语⾔⾓度来说,类是⼀种数据类型,⽽___________是具有这种类型的变量
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论