您的当前位置:首页正文

C++习题

2020-12-02 来源:我们爱旅游
第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、从语言角度来说,类是一种数据类型,而___________是具有这种类型的变量 A)实例 B)实物 C)特征 D)对象

【解答】答案:B,实例是类创建的,变量是数据类型创建的。

11、若Queue是类,aQueue 是它的一个对象,p1是类对象aQueue的一个指针,那么类对象 aQueue的指针p1可以通过___________来访问类的成员。

A):: B). C); D)-> 【解答】答案:D,使用p1->访问类的成员。

二、填空题

1、类中的数据和成员函数默认类型为___________. 【解答】答案:私有

2、结构中的数据和成员函数默认类型为___________ 【解答】答案: 公有

3、在类内部定义的___________数据不能被不属于该类的函数来存取,定义为___________的数据,函数则可以在类外部进行存取

【解答】答案:private public

4、 ___________是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象和其他内部管理操作.

【解答】答案:构造函数

5、一个类有___________个析构函数 【解答】答案: 1

6、静态数据成员在定义或说明时前面要加上关键字___________. 【解答】答案: static

7、 ___________成员函数的实现中不能直接引用类中说明的非静态成员. 【解答】答案:静态

8、定义在类内部的函数为类默认状态___________,在类外部每次调用该函数时,定义的函数代码会在调用函数位置展开。

【解答】答案:内联函数

第9章 运算符重载

一、选择题

1、下列运算符中,不能重载的是___________。 A) :: B) + C) << D) && 【解答】答案:A ,其他都可以被重载。

2、下列关于运算符重载的描述中,正确的是___________。

A) 不能改变运算符的优先级 B) 能够改变操作数的数目

C) 所有运算符都可以重载 D) 通过重载“()”能够改变运算符的结合性 【解答】答案:A ,其中,不能改变操作数的数目,不能通过重载括号改变结合性。 3、执行语句“person p1= p2”将调用p1的___________。 A) 构造函数 B) 拷贝构造函数

C) 析构函数 D) 赋值运算符重载函数 【解答】答案:B ,和person p1(p2)一样都是调用拷贝构造函数,如果person p1; p1=p2则调用重载赋值运算符函数。

4、基本类型到用户定义类型的转换通过___________实现。

A) 强制转换 B) 用户自定义类型的构造函数 C) 基本类型的转换函数 D) 无法实现

【解答】答案:B。只有用户自定义类型的构造函数可以实现题目中的转换。

二、填空题

1、使用重载运算符号有两个优点:1、___________。2、___________。

【解答】答案:使C++代码更直观,更容易读。简单运算符组成的表达式常常比函数调用更简洁,易懂 运算符的重载可以改进程序的可读性

2、下面类的定义中,几个函数的名称是什么?

class X { X(some_value); X(const X&); ~X(); }; // ___________ // ___________ // ___________ // ___________ X&operator = (const X&); 【解答】答案:构造函数 拷贝构造函数 重载赋值运算符函数 析构函数 3、表达式“converter d1 = 10;”,“10”是一个整型的数,“d1”是一个用户自定义

对象。实现这种赋值关系,通过用___________实现。

【解答】答案:户定义类型的构造函数

4、当对象进行赋值的时候,“person p1 = p2;”和“person p1; p1 = p2;”是不同的。“person p1 = p2;”在声明的就用另一个对象对其赋值,等价于“___________”,为了给p1分配一块新的堆空间,系统将调用___________。语句“person p1; p1 = p2”是不同的,将调用___________。

【解答】答案:person p1(p2) 拷贝构造函数 重载赋值运算符函数

三、简答题与程序设计题

1、利用运算符的重载,定义复数类的加法与减法,使之能够执行下列运算。 Complex a(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 继承关系

【解答】答案:

class Person { private: }; class Student : public Person { char * name; int age; void getInfo() {cout << name << \" \" << age << endl;} setAge (int a) { age = a;} setName ( char * c) { name = c;} public: private: }; char * school; public: 3、简述protected关键字的用法以及约束关系。 【解答】答案:

成员的访问规则如表10-1所示。

表10-1 成员的访问规则

访问修饰符 public protected private 从自身类访问 是 是 是 从派生类访问 是 是 否 外部对象访问 是 否 否 从表中可以看出,如果不考虑继承关系的话,可以认为protected和private修饰府的限定关系相同。

4、简述公有继承、私有继承和保护继承对基类成员的约束关系。 【解答】答案:参考上面的表10-1。

一、选择题

1、C++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行; 另一种是通过___________,派生出新的类。

A) 复用 B)继承 C)单继承 D)多继承 【解答】答案:B,通过继承派生出新的类。

2、继承具有___________,即当基本类本身也是某个类的派生类时,底层的派生类也会自动继承间接基类的成员。

A)规律性 B)传递性 C)重复性 D)多样性 【解答】答案:B,继承具有传递性。

3、在派生类中定义的析构函数与它所属的基类___________. A) 一定有关 B)一定无关 C)以上都不对 D)

【解答】答案:A ,因为派生类的析构函数需要释放基类的资源。 4、下列对派生类的描述中, ___________是错误的。 A)一个派生类可以作另一个派生类的基类 B)派生类至少有一个基类 C)派生类的成员除了它自己的成员外,还包含了它的基类成员 D)派生类中继承的基类成员的访问权限到派生类保持不变

【解答】答案:D,受到继承方式的影响,比如私有继承,基类成员的访问权限将改变。

5、派生类的对象对它的基类成员中___________是可以访问的。 A)公有继承的公有成员 B)公有继承的私有成员 C)公有继承的保护成员 D)私有继承的公有成员 【解答】答案:A,只有公有继承的地公有成员才可以访问。

第11章 多重继承和多态性

一、选择题

1、虚函数使用关键字___________。

A) virtual B) static C) public D) private 【解答】答案:A,虚函数使用vitual 定义。

2、下列选项中,描述了抽象类特性的是___________。

A) 可以说明虚函数 B) 可以进行构造函数重载 C) 可以定义友元函数 D) 不能定义其对象

【解答】答案:D,抽象类不能直接创建对象,其他的都是类的一般特征。 3、实现运行时的多态性,要使用___________。

A) 重载函数 B) 构造函数 C) 虚函数 D) 析构函数

【解答】答案:C,运行时多多态是通过虚函数来实现的。

4、如果一个类中,至少有一个纯虚函数,那么称该类为___________。 A) 抽象类 B) 虚基类 C) 派生类 D) 以上都不对 【解答】答案:A,此为书上抽象类的定义。 5、虚基类的作用是

A) 为了解决同一基类被多次继承产生的二义性。 B) 实现多态

C) 为了能够定义虚析构函数 D) 为了能够定义抽象类

【解答】答案:A ,其中选项B错误因为虚函数是实现多态的方式。消除二义性是虚基类引入的目的。

6、引入虚析构函数的作用是___________。

A) 为了实现析构函数的重载 B) 为了实现类的多态性 C) 防止造成内存泄漏 D) 提高程序执行效率 【解答】答案:C,虚析构函数的引入是为了防止内存泄漏。

二、填空题

1、可以为一个派生类指定多个基类,这样的继承结构称为___________。 【解答】答案:多继承

2、二义性有两种情况:1、___________;2、___________。

【解答】答案:同名成员被继承产生二义性 同一基类被多次继承产生的二义性 3、为了解决同一基类被多次继承产生的二义性,在C++语言中,引入了___________机制。

【解答】答案:虚拟继承

4、C++支持两种类型的多态性:1、___________ 2、___________ 【解答】答案:编译时多态 运行时多态

5、包含___________的类,叫做抽象类。纯虚函数就是___________的虚函数。 【解答】答案:纯虚函数 函数体为空

6、如果析构函数不声明为虚拟的,则在程序执行的时候,可能造成___________。 【解答】答案:内存的泄漏

三、简答题和程序设计题

1、简述为什么多继承会出现二义性。

【解答】答案:一般说来,在派生类中对基类成员的访问应该是惟一的。但是,由于多继承情况下,可能造成对基类中某个成员的访问出现了不惟一的情况,则称为对基类成员访问的二义性问题。二义性有两种情况:1、同名成员被继承产生二义性;2、同一基类被多次继承产生的二义性。

2、简述运行时多态和编译时多态的实现机制。

【解答】答案:多态性的定义是:“同一操作作用于不同类的实例,不同类将进行不同的解释,最后产生不同的执行结果”。C++支持两种类型的多态性。

 编译时多态性:编译时多态是通过重载来实现的。对于非虚的成员来说,系统在

编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

 运行时多态性:运行时多态性是直到系统运行时,才根据实际情况决定实现何种

操作。C++中,运行时的多态性通过虚方法实现。

编译时的多态性提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

3、简述虚析构函数的必要性。

【解答】答案:析构函数一般用来释放申请的内存空间。如果析构函数不声明为虚拟的,则在程序执行的时候,可能造成内存的泄漏。

4、在基类shape中定义虚函数getArea(),然后定义派生类,分别实现圆、梯形以及正方形面积函数getArea()。

【解答】答案:参考proj11_08.cpp,定义一个基类,3个派生类分别是圆、梯形和正方形。

一、选择题

1、关于动态联编的下列描述中,___________是错误的。 A)动态联编是以虚函数为基础的 B)动态联编是在运行是确定所调用的函数代码的 C)动态联编调用函数操作是指向对象的指针或对象引用 D)动态联编是在编译时确定操作函数的

【解答】答案:D ,动态联编实现多态,是在运行的时候确定操作函数的。 2、关于虚函数的描述中,___________是正确的。 A)虚函数是一个statiC类型的成员函数 B)虚函数是一个非成员函数 C)基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数 D)派生类的虚函数与基类的虚函数具有不同的参数个数和类型 【解答】答案:C ,派生类中可以不说明为虚函数。

3、关于存虚函数和抽象类的描述中, ___________是错误的。 A)纯虚函数是一种特殊的虚函数,它没有具体的实现 B)抽象类是指具有纯虚函数的类 C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类 D)抽象类只能作为基类来使用,其存虚函数的实现由派生类给出

【解答】答案:C,不一定不再是抽象类,如果没有对纯虚函数进行重定义,依然是抽象类。

4、下列描述中,___________是抽象类的特征 A)可以说明虚函数 B)可以进行构造函数重载 C)可以定义友元函数 D)不能说明其对象 【解答】答案:D,抽象类不能直接定义对象。

5、 ___________是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。

A)虚析构函数 B)虚构造函数 C)纯虚函数 D)静态成员函数 【解答】答案:C

6、如果一个类至少有一个纯虚函数,那么就称该类为___________。 A)抽象类 B)虚基类 C)派生类 D)以下都不是 【解答】答案:A ,抽象类的定义。

7、在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承 的规则___________。

A) 完全相同 B)完全不同 C)部分相同部分不同 D)以上都不对

【解答】答案:A ,多继承与单继承的规则是一致的。

8、在多继承的构造函数定义中,几个基类的构造函数之间用___________分隔。 A): B); C), D)::

【解答】答案:C,多重继承德基类构造函数使用逗号分隔。 9、关于多继承二义性的描述中, ___________是错误的. A)类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性

B)解决二义性的最常用的方法是对成员名的限定法

C)基类和派生类中同时出现的同名函数,也存在二义性问题 D)一个派生类是从两个基类派生而来,而这两个基类又有共同的基类,对该基类 成员进行访问时,也可能出现二义性

【解答】答案:C ,基类&派生类同时出现同名函数,可能构成重载或者重写,不存在二义性。

10、设置虚基类的目的是___________. A)简化程序 B)消除二义性 C)提高运行效率 D)减少目标代码 【解答】答案:B,目的是消除二义性。

11、带虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函 数。这样将对虚基类的子对象初始化___________。

A)与虚基类下面的派生类个数有关 B)多次 C)二次 D)一次 【解答】答案:D,只被初始化1次。

第12章 程序结构与C++的输入输出

一、选择题

1、I/O类库的根基类是___________。

A) istream B) ostream C) ios D) fstream 【解答】答案:C ,其他的都是ios的派生类。 2、I/O类库中的类不包含在___________。

A) iostream.h B) fstream.h C) stream.h D) istream.h 【解答】答案:C,没有stream.h文件。

3、不能用于用户进行标准I/O操作的类对象是___________。 A) cin B) cout C) clog D) cstr

【解答】答案:D,其中cin、cout和clog都是I/O操作对象。

4、从键盘的输入中读入一个值,并赋值给x的语句是___________。 A) cin >> x B) cin << x C) cout >> x D) cout << x

【解答】答案:A ,其中C和D是输入操作。B的箭头错误。

5、从键盘上输入数据的时候,只有在输入完数据并按下___________后,系统才把该行数据存入缓冲区。

A) 空格 B) 回车

C) Tab D) 空格或回车

【解答】答案:D,默认情况下空格和回车都是数据存入缓冲区的标志。

二、填空题

1、所有的I/O流类都是___________的派生类。 【解答】答案:ios

2、一个程序经常由多个源文件组成,每个源文件是一个可编译的程序单位。一个源文件一般包含___________和___________。

【解答】答案:头文件(“.h”) 实现文件(“.cpp”)

3、cerr和clog的区别是:cerr是含___________,clog是含___________。

【解答】答案:直接输出到屏幕 先输出到缓冲区,如果缓冲区满或者遇到“endl”的时候,将输出到屏幕。

4、语句:“cin.getline(str, 1000, '\\n');”的意义是___________。

【解答】答案:接受输入字符串,最大长度是1000个字节,如果遇到回车则停止输入。

5、语句:“sorcefile.open(\"myimage.jpg\”的意义是___________。 【解答】答案:以输入的形式读取myimage.jpg文件,以二进制的形式打开。

三、简答题与程序设计题

1、编写实现数组的排序,将数字以及排序(倒序)算法的声明部分放在“myarray.h”文件中,将实现的算法放在“myarray.cpp”文件,在“proj12_99.cpp”文件实现主函数。

【解答】答案:程序结构参考proj12_02.cpp程序。

2、编写程序,从键盘上输入10行字符串,如果遇到回车则退出,并将输入的字符串保存到“input.txt”文件中。

【解答】答案:参考程序proj12_13.cpp。 3、编写程序实现文本文件的拷贝。

【解答】答案:参考程序proj12_16.cpp。

4、编写程序实现二进制文件的加密和解密。加密过程:读取二进制文件,将所有字节的ASCII码+1。解密过程:恢复原来文件的格式。

【解答】答案:参考程序proj12_16.cpp,将得到每个ASCII码全部加1然后存储。

一、选择题

1、在C++中,打开一个文件,就是将这个文件与一个___________建立关联;关闭一个文件,就取消这种关联。

A) 类 B)流 C)对象 D)结构

【解答】答案:B,利用流与文件对应,然后操作文件的内容。 2、C++语言本身没有定义I/O操作,但I/O操作包含在C++实现中。C++标准库iostream库提供了基结构。I/O操作分别由两个类istream和___________

A) iostream B)iostream.h C) ostream D)cin

【解答】答案:C,两个I/O操作的类:istream与ostream。 3、cin是___________的一个对象,处理标准输入。 A) istream B)ostream C)cerr D)clog

【解答】答案:A,输入的对象包括在istream中。 4、若定义cin>>str; 当输入为:

object windows programming! 所得的结果是str=___________ A) object windows programming B)object C)object windows D)object windows programming

【解答】答案:B,当出现空格后,一次输入将停止。 5、进行文件操作时包含___________文件。 A) iostream.h B)fstream.h C)stdio.h D)stdlib.h 【解答】答案:B,fstream.h用来处理文件。

6、使用如setw()的操作对数据进行格式输出时,包含___________文件。 A) iostream.h B)fstream.h C)iomanip.h D)stdlib.h

【解答】答案:C,格式化函数包括在头文件iomanip.h中。 7、关于read()函数的下列描述中,___________是对的。 A) 该函数是用来从键盘输入中获取字符串 B) 该函数所获取的字符多少是不受限制的 C) 该函数只能用于文本文件的操作中 D) 该函数只能按规定读取所指定的字符数 【解答】答案:D,read()函数只能按照规定读取。

8、在ios中提供控制格式的标志中,___________是转换为十六进制形式的标志位。 A) hex B)oct C) dec D)left

【解答】答案:A,其中B是八进制的标志位,C是十进制的标志位。 9、控制格式I/O的操作中,___________是设置域宽的。 A)ws B)oct C)setfill() D)setw() 【解答】答案:D,使用setw()设置域宽。

10、下列函数中,___________是对文件进行写操作的。 A) get() B) read() C) seekg() D) put() 【解答】答案:D,只有put()是进行写操作的。

第13章 模板

一、选择题

1、模板参数表中参数使用的符号分隔是___________。 A) , B) ;

C) / D) 以上都不是 【解答】答案:A ,模板使用逗号分隔参数列表。 2、类模板规定了如何创建一个___________。 A) 对象 B) 类 C) 实例 D) 变量

【解答】答案: B,类模板经过编译以后可以根据不同的数据类型产生不同的类。 3、类模板的模板参数___________。

A) 只可以作为数据成员的类型。 B) 只可以作为成员函数的返回类型 C) 只可以作为成员函数参数类型 D) 以上都可以 【解答】答案: D。

4、以上对模板的声明,正确的是___________。

A) template B) template C) template【解答】答案: C,其中B选项少了个class,该class不能省略。D选项分隔符号用了分号。

5、有类模板定义如下: template class Dream {… };

下列类对象定义中,正确的是___________。

A) Dream a; B) Dream a; C) Dream a; D) Dream a;

【解答】答案:C,在定义类的时候,将type换成数据类型就可以了,因此C正确。

二、填空题

1、填写下面的空格,将程序代码补充完整。

template < ___________> ___________min(T x, T y) { cout<<\"调用min(T x, T y),最小值为\"; } return ___________ 【解答】答案: class T T x > y ? y : x; 2、C++模板分为___________和___________。

【解答】答案:类模板(class template) 函数模板(function template)

3、本质上复合数据类型中的vector和___________都是系统定义好的模板类。比如定义vector的时候,使用的语法是“___________”。

【解答】答案:list(其他复合类型也可以) vector ivec (12, 30);

三、简答题和程序设计题

1、简述在C++语言中,使用模板的优点。

【解答】答案:所谓模板,就是将某段程序中的数据类型参数化,使得它能够处理某个范围内的数据类型,而不必为每种可能的类型都建立一个实例,从而避免了重复劳动,增强了程序的灵活性和有效性。

2、编写一个函数模板,它返回两个值中的最小值。 【解答】答案:参考程序proj13_01.cpp。

3、编写一个函数模板,求出输入数组的最大值、最小值和平均值。 【解答】答案:参考程序proj13_01.cpp。

4、编写一个类模板,实现返回两个值中的最大值。 【解答】答案:参考程序proj13_04.cpp

5、编写一个类模板,求出输入数组的最大值、最小值和平均值。 【解答】答案:参考程序proj13_04.cpp

因篇幅问题不能全部显示,请点此查看更多更全内容