cjj复习1.docx
- 文档编号:10740265
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:26
- 大小:45.91KB
cjj复习1.docx
《cjj复习1.docx》由会员分享,可在线阅读,更多相关《cjj复习1.docx(26页珍藏版)》请在冰点文库上搜索。
cjj复习1
第7章类的基本概念
一、选择题
1、以下不属于类存取权限是___________。
A)publicB)static
C)protectedD)private
【解答】答案:
B,ACD均为类访问修饰符,B是普通的修饰符。
2、类的析构函数是___________时调用的。
A)类创建B)创建对象
C)引用对象D)释放对象
【解答】答案:
D,析构函数功能是释放对象,收回资源。
3、有关构造函数的说法,不正确的是___________。
A)对象是类的一个实例B)任何一个对象只能属于一个具体的类
C)一个类只能有一个对象
D)类与对象的关系和数据类型与变量的关系相似
【解答】答案:
C,一个类可以创建多个对象。
4、通常拷贝构造函数的参数是___________。
A)某个对象名B)某个对象的成员名
C)某个对象的引用名D)某个对象的指针名
【解答】答案:
C,构造函数的参数是类本身的引用。
5、假定A是一个类,那么执行语句“Aa,b(3),*p;”调用了___________次构造函数。
A)2B)3
C)4D)5
【解答】答案:
A,其中*p并没有调用构造函数,只有使用new以后,才创建对象。
二、填空题
1、假定DD是一个类,则执行“DDa[10],b
(2)”语句时,系统自动调用该类构造函数的次数为___________
【解答】答案:
11次
2、对于任意一个类,析构函数的个数最多为___________个。
【解答】答案:
1
3、一个类的___________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。
【解答】答案:
析构函数
4、C++程序的内存格局通常分为四个区:
(1)___________,该区用来存放全局变量、静态数据、常量。
(2)___________,该区用来存放类成员函数、其他函数代码。
(3)___________该区用来存放局部变量、函数参数、返回数据和返回地址。
(4)___________。
该区是自由存储区。
【解答】答案:
全局数据区(dataarea)代码区(codearea)栈区(stackarea)堆区(heaparea)
三、简答题与程序设计题
1、简述3种访问修饰符对类成员的访问限制。
【解答】答案:
C++语言通过访问限定符public、private和protected将类成员分成三类:
公有成员、私有成员和保护成员。
●公有成员(public修饰)可以被该类的成员函数访问,也可以在程序的任意地方被任意访问。
●私有成员(private修饰)只能被该类的成员函数或者该类的友元函数访问。
友元是为了增加程序的灵活性而引入的概念,允许程序中的某些函数访问类中的私有成员。
●保护成员(protected)对于派生类来说,就像是公有成员,可以被访问,对于程序的其他部分来说,就像是私有成员,不允许被访问。
2、定义一个学生类,输入学生的姓名、语文成绩、数学成绩和英语成绩,计算并输出每位学生的各门功课的成绩、总成绩和平均成绩。
【解答】思路:
设计一个类,类的数据成员包括姓名、语文成绩、数学成绩和英语成绩。
类的成员函数包括算总成绩、算平均成绩和输出各门功能的成绩。
3、简述拷贝构造函数的必要性。
【解答】答案:
当用一个对象值初始化一个新对象的时候,或者利用一个对象构造另一个对象的时候,要涉及到对象的拷贝,比如执行语句“personp1=p2”或者“personp1(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)friendclass<类名>;B)youyuanclass<类名>;
C)classfriend<类名>;D)friendsclass<类名>
【解答】答案:
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)publicB)private
C)protectedD)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、从语言角度来说,类是一种数据类型,而___________是具有这种类型的变量
A)实例B)实物
C)特征D)对象
【解答】答案:
B,实例是类创建的,变量是数据类型创建的。
11、若Queue是类,aQueue是它的一个对象,p1是类对象aQueue的一个指针,那么类对象aQueue的指针p1可以通过___________来访问类的成员。
A):
:
B).
C);D)->
【解答】答案:
D,使用p1->访问类的成员。
二、填空题
1、类中的数据和成员函数默认类型为___________.
【解答】答案:
私有
2、结构中的数据和成员函数默认类型为___________
【解答】答案:
公有
3、在类内部定义的___________数据不能被不属于该类的函数来存取,定义为___________的数据,函数则可以在类外部进行存取
【解答】答案:
privatepublic
4、___________是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象和其他内部管理操作.
【解答】答案:
构造函数
5、一个类有___________个析构函数
【解答】答案:
1
6、静态数据成员在定义或说明时前面要加上关键字___________.
【解答】答案:
static
7、___________成员函数的实现中不能直接引用类中说明的非静态成员.
【解答】答案:
静态
8、定义在类内部的函数为类默认状态___________,在类外部每次调用该函数时,定义的函数代码会在调用函数位置展开。
【解答】答案:
内联函数
第9章运算符重载
一、选择题
1、下列运算符中,不能重载的是___________。
A):
:
B)+
C)< 【解答】答案: A,其他都可以被重载。 2、下列关于运算符重载的描述中,正确的是___________。 A)不能改变运算符的优先级B)能够改变操作数的数目 C)所有运算符都可以重载D)通过重载“()”能够改变运算符的结合性 【解答】答案: A,其中,不能改变操作数的数目,不能通过重载括号改变结合性。 3、执行语句“personp1=p2”将调用p1的___________。 A)构造函数B)拷贝构造函数 C)析构函数D)赋值运算符重载函数 【解答】答案: B,和personp1(p2)一样都是调用拷贝构造函数,如果personp1;p1=p2则调用重载赋值运算符函数。 4、基本类型到用户定义类型的转换通过___________实现。 A)强制转换B)用户自定义类型的构造函数 C)基本类型的转换函数D)无法实现 【解答】答案: B。 只有用户自定义类型的构造函数可以实现题目中的转换。 二、填空题 1、使用重载运算符号有两个优点: 1、___________。 2、___________。 【解答】答案: 使C++代码更直观,更容易读。 简单运算符组成的表达式常常比函数调用更简洁,易懂运算符的重载可以改进程序的可读性 2、下面类的定义中,几个函数的名称是什么? classX { X(some_value);//___________ X(constX&);//___________ X&operator=(constX&);//___________ ~X();//___________ }; 【解答】答案: 构造函数拷贝构造函数重载赋值运算符函数析构函数 3、表达式“converterd1=10;”,“10”是一个整型的数,“d1”是一个用户自定义对象。 实现这种赋值关系,通过用___________实现。 【解答】答案: 户定义类型的构造函数 4、当对象进行赋值的时候,“personp1=p2;”和“personp1;p1=p2;”是不同的。 “personp1=p2;”在声明的就用另一个对象对其赋值,等价于“___________”,为了给p1分配一块新的堆空间,系统将调用___________。 语句“personp1;p1=p2”是不同的,将调用___________。 【解答】答案: personp1(p2)拷贝构造函数重载赋值运算符函数 三、简答题与程序设计题 1、利用运算符的重载,定义复数类的加法与减法,使之能够执行下列运算。 Complexa(2,5),b(7,8),c(0,0) c=a+b; c=4.1+a; 【解答】答案: 参考书上二元操作符重载的方法,重新定义加号运算。 2、利用运算符的重载,编写一个时间类,实现时间的加、减、读和输出。 【解答】答案: 主要考虑加和减的操作是60进制,其他部分和重载普通加号运算符一致。 补充习题注解 一、选择题 1、下列运算符中,___________运算符在C++中不能重载 A)? B)+ C)-D)<= 【解答】答案: A,其中,BCD均可以重载。 2、下列运算符中,___________运算符在C++中不能重载 A)&&B)[] C): : D)NEW 【解答】答案: C,域限定符“: : ”不能重载。 3、在C++中,通常将重载运算符的成员函数称为___________ A)运算符函数B)重载函数 C)函数重载运算符D)以上都不对 【解答】答案: A,称之为运算符函数。 4、对定义重载函数的下列要求中,___________是错误的 A)要求参数的个数不同B)要求参数中至少有一个类型不同 C)要求参数个数相同时,参数类型不同D)要求函数的返回值不同 【解答】答案: D,函数重载跟函数的返回值没有关系。 5、下列函数中,___________不能重载. A)成员函数B)非成员函数 C)析构函数D)构造函数 【解答】答案: C,析构函数不能重载。 6、系统在调用重载函数时,往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是___________。 A)参数个数B)参数类型 C)函数名称D)函数类型 【解答】答案: D,函数重载跟函数的返回值,也就是函数类型无关。 7、下列对重载函数的描述中,___________是错误的。 A)重载函数中不允许使用默认参数 B)重载函数中编译是根据参数表进行选择的 C)不要使用重载函数来描述毫无相干的函数 D)构造函数重载将会给初始化带来多种方式 【解答】答案: A,重载函数中可以使用默认参数。 8、下列关于运算符重载的描述中,___________是正确的。 A)运算符重载可以改变运算数的个数B)运算符重载可以改变优先级 C)运算符重载可以改变结合性D)运算符重载不可以改变语法结构 【解答】答案: D,运算符重载不可以改变结构。 9、运算符重载函数是___________。 A)成员函数B)友员函数 C)内联函数D)带默认参数的函数 【解答】答案: C,运算符重载函数系统处理为内联函数。 第10章继承 一、选择题 1、在C++类体系中,不能被派生类继承的是___________。 A)构造函数B)虚函数 C)静态成员函数D)赋值操作函数 【解答】答案: A,构造函数是每个类特有的,不能被继承。 2、下列对基类和派生类关系的描述中,错误的是___________。 A)派生类是基类的具体化B)派生类是基类的子集 C)派生类是基类定义的延续D)派生类是基类的组合 【解答】答案: B,派生类是基类的扩展,基类是派生类的子集。 3、设置虚基类的目的是___________。 A)简化程序B)消除二义性 C)提高程序运行效率D)减少目标代码 【解答】答案: B,目的是消除二义性。 4、可以访问类对象的私有数据成员的是___________。 A)该类的对象B)该类友元类派生的成员函数 C)类中的友元函数D)公有派生类的成员函数 【解答】答案: C,友友不受类的修饰符限制。 5、下面对继承关系描述中,正确的是___________。 A)在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。 B)在公有继承中,基类中只有公有成员对派生类的对象是可见的。 C)在私有继承中,基类只有公有成员对派生类对象是可见的。 D)在私有继承中,基类中的保护成员对派生类的对象是可见的。 【解答】答案: B,其中,私有成员不被继承。 私有继承中,没有成员在派生类中是可见的。 二、填空题 1、派生类的成员函数可以直接访问基类的___________成员,不能直接访问基类的___________成员。 【解答】答案: 1、公有和保护私有 2、在一个或若干个类的基础上构造一个新类,被称为___________。 【解答】答案: 2、继承(派生) 3、类B从类A私有派生,类C从类B派生,不管类C如何继承类B,类C的成员函数不能访问A类的___________成员。 【解答】答案: 3、所有 4、如果创建类时未给定访问说明符,则默认其为___________。 【解答】答案: 4、私有类型 5、继承可以称为“___________”关系。 例如: 管理者是一个雇员,或秘书也是一个雇员等等,这些都可以用继承来实现。 如果是成员关系,可以称为“___________”关系。 【解答】答案: 5、是一个有一个 三、简答题与程序设计题 1、简述继承的必要性。 【解答】答案: “继承”是类之间的一种特殊联系。 基类(Person类),是指能够派生出新类的类,也称为父类;被基类派生出的新类称为派生类,也称为子类(Student类)。 不仅简化了代码,而且重用了部分代码 2、编写程序实现图10-1所示的继承关系。 图10-1继承关系 【解答】答案: classPerson { private: char*name; intage; public: voidgetInfo() {cout< setAge(inta) {age=a;} setName(char*c) {name=c;} }; classStudent: publicPerson { private: char*school; public: }; 3、简述protected关键字的用法以及约束关系。 【解答】答案: 成员的访问规则如表10-1所示。 表10-1成员的访问规则 访问修饰符 从自身类访问 从派生类访问 外部对象访问 public 是 是 是 protected 是 是 否 private 是 否 否 从表中可以看出,如果不考虑继承关系的话,可以认为prote
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cjj 复习