1、国家二级( C+)机试模拟试卷 167及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)栈是 “先进先出 ”的线性表 ( B)队列是 “先进后出 ”的线性表 ( C)循环队列是非线性结构 ( D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 2 支持子程序调用的数据结构是 ( )。 ( A)栈 ( B)树 ( C)队列 ( D)二叉树 3 某二叉树有 5个度为 2的结点,则该二叉树中的叶子结点数是 ( )。 ( A) 10 ( B) 8 ( C) 6 ( D) 4 4 下列排序方法中,最坏情况下比较次数最少的是 ( )。 ( A)冒泡排序 ( B)简单选择排序 (
2、 C)直接插入排序 ( D)堆排序 5 软件按功能可以分为:应用软件、系统软件和支撑软件 (或工具软件 )。下面属于应用软件的是 ( )。 ( A)编译程序 ( B)操作系统 ( C)教务管理系统 ( D)汇编程序 6 下面叙述中错误的是 ( )。 ( A)软件测试的目的是发现错误并改正错误 ( B)对被调试的程序进行 “错误定位 ”是程序调试的必要步骤 ( C)程序调试通常也称为 Debug ( D) 软件测试应严格执行测试计划,排除测试的随意性 7 耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是 ( )。 ( A)提高耦合性降低内聚性有利于提高模块的独立性 ( B)降低耦合
3、性提高内聚性有利于提高模块的独立性 ( C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度 ( D)内聚性是指模块间互相连接的紧密程度 8 数据库应用系统中的核心问题是 ( )。 ( A)数据库设计 ( B)数据库系统设计 ( C)数据库维护 ( D)数据库管理员培训 9 有两个关系 R, S如下: 由关系 R通过运算得到关系 S,则所使用的运算为 ( )。 ( A)选择 ( B)投影 ( C)插入 ( D)连接 10 将 E-R图转换为关系模式时,实体和联系都可以表示为 ( )。 ( A)属性 ( B)键 ( C)关系 ( D)域 11 字面常量 42、 4 2、 42L的数据类型分别是
4、 ( )。 ( A) long、 double、 int ( B) long、 float、 int ( C) int、 double、 long ( D) int、 float、 long 12 执行下列语句段后,输出字符 “*”的个数 是 ( )。 for(int i=50; i 1; -i) cout *; ( A) 48 ( B) 49 ( C) 50 ( D) 51 13 有如下程序段: int i=0, j=1; nt &r=i; r=j; int*p=&i; *p=&r; 其中会产生编译错误的语句是 ( )。 ( A) ( B) ( C) ( D) 14 必须用一对大括号括起来的
5、程序段是 ( )。 ( A) switch语句中的 case标号语句 ( B) if语句的分支 ( C)循环语句 的循环体 ( D)函数的函数体 15 下列符号中不属于 C+关键字的是 ( )。 ( A) friend ( B) namespace ( C) continue ( D) byte 16 下列有关函数重载的叙述中,错误的是 ( )。 ( A)函数重载就是用相同的函数名定义多个函数 ( B)重载函数的参数列表必须不同 ( C)重载函数的返回值类型必须不同 ( D)重载函数的参数可以带有默认值 17 下列有关运算符重载的叙述中,正确的是 ( )。 ( A)运算符重载是多态性的一种表现
6、 ( B) C+中可以通过运算符重载创造新的运算符 ( C) C+中所有运算符都可以作为非成员函数重载 ( D)重载运算符时可以改变其结合性 18 在下列原型所示的 C+函数中,按 “传值 ”方式传递参数的是 ( )。 ( A) void f1(int x); ( B) void f2(int * x); ( C) void f3(const int * x); ( D) void f4(int &x); 19 将前缀运算符 “-”重载为非成员函数,下列原型中能正确用于类中说明的是( )。 ( A) Deer& operator-(int); ( B) Deer operator-(Deer&
7、, int); ( C) friend Deer& operator-(Deer&); ( D) friend Deer operator-(Deer&, int); 20 有如下函数定义: void func(int a, int& b) a+; b+; 若执行代码段: int x=0, y=1; func(x, y); 则变量 x和 y的值分别是 ( )。 ( A) 0和 1 ( B) 1和 1 ( C) 0和 2 ( D) 1和 2 21 下列运算符中,不能被重载的是 ( )。 ( A) & ( B) != ( C) ( D) + 22 关于运算符重载,下列表述中正确的是 ( )。 (
8、A) C+已有的任何运算符都可以重载 ( B)运算符函数的返回类型不能声明为基本数据类型 ( C)在类型转换符函数的定义中不需要声明返回类型 ( D)可以通过运算符重载来创建 C+中原来没有的运算符 23 下列关于类定义的说法中,正确的是 ( )。 ( A)类定义中包括数据成员和函数成员的声明 ( B)类成员的缺省访问权限是保护的 ( C)数据成员必须被声明为私有的 ( D)成员函数只能在类体外进行定义 24 有如下程序: #include iostream using namespace std; class A public: static int a; void init()a=1; A
9、(int a=2)init(); a+; ; int A: a=0; A obj; int main() cout obj a; return0; 运行时输出的结果是 ( )。 ( A) 0 ( B) 1 ( C) 2 ( D) 3 25 以下关键字不能用来声明类的访问权限的是 ( )。 ( A) public ( B) static ( C) protected ( D) private 26 下列关于派生类构造函数和析构函数的说法中,错误的是 ( )。 ( A)派生类的构造函数会隐含调用基类的构造函数 ( B)如果基类中没有缺省构造函数,那么派生类必须定义构造函数 ( C)在建立派生类对象
10、时,先调用基类的构造函数,再调用派生类的构造函数 ( D)在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 27 派生类的成员函数不能访问基类的 ( )。 ( A)公有成员和保护成员 ( B)公有成员 ( C)私有成员 ( D)保护成员 28 有如下类定义: class AA int a; Public: AA(int n=0): a(n) ; class BB: public AA public: BB(int n) _ ; 其中横线处的缺失部分是 ( )。 ( A): a(n) ( B): AA(n) ( C) a(n); ( D) a=n; 29 有如下程序: #incl
11、ude iostream using namespace std; class test private: int a; public: test()cout “constructor“ endl; test(int a)cout a endl; test(const test&_test) a=_test a; cout “copy constructor“ endl: test()cout “destructor“ endl; ; int main() test A(3); return0; 执行这个程序的输出结果是 ( )。 ( A) 3 ( B) constructor destruc
12、tor ( C) copy constructor destructor ( D) 3 destructor 30 若有如下类声明: class MyClass public: MyClass()cout 1; ; 执行下列语句 MyClass a, b2, *p2; 程序的输出结果是 ( )。 ( A) 11 ( B) 111 ( C) 1111 ( D) 11111 31 有如下程序: #include iostream using namespace std; class Point public: static int number; public; Point()number+; P
13、oint()number-; ; int Point: number=0; int main() Point*ptr; Point A, B; Point*ptr_point=new Point3; ptr=ptr_point; Point C; cout Point: number endl: deleteptr; return0; 执行这个程序的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 6 ( D) 7 32 有如下程序: #include iostream using namespace std; class Sample friend long fun(Sample
14、s); public: Sample(long a)x=a; private: long x; ; long fun(Sample s) if(s x 2)return1; return s x*fun(Sample(s x-1); int main() int sum=0; for(int i=0; i 6; i+) sum+=fun(Sample(i); cout sum: return0; 执行这个程序的输出结果是 ( )。 ( A) 120 ( B) 16 ( C) 154 ( D) 34 33 有如下程序: class Base public: int data; ; class D
15、erived1: public Base; class Derived2: protected Base; int main() Derived1 d1; Derived2 d2; d1 data=0; d2 data=0; return0; 下列关于程序编译结果的描述中,正确的是 ( )。 ( A) 皆无编译错误 ( B) 有编译错误, 无编译错误 ( C) 无编译错误, 有编译错误 ( D) 皆有编译错误 34 有如下程序: #include iostream using namespace std; class A public: A(int i)x=i; void dispa()cou
16、t x , ; private: int x; ; class B: public A public: B(int i): A(i+10)x=i; void dispb()dispa(); tout x endl; private: int x; ; int main() B b(2); b dispb(); return0; 执行这个程序的 输出结果是 ( )。 ( A) 10, 2 ( B) 12, 10 ( C) 12, 2 ( D) 2, 2 35 有如下程序: #include iostream using namespace std; class Music public: voi
17、d setTitle(char*str)strcpy(title, str); protected: char type10; private: char title20; ; class Jazz: public Music public: void set(char*str) strcpy(type, “Jazz“); strcpy(title, str); ; 下列叙述中正确的是 ( )。 ( A)程序编译正确 ( B)程序编译时语句 出错 ( C)程序编译时语句 出错 ( D)程序编译时语句 和 都出错 36 有如下程序: #include iostream using namespa
18、ce std; class Book public: Book(char*t=“ “)strcpy(title, t); _ private: char title40; ; class Novel: public Book public: Novel(char*t=“ “): Book(t) char*Category()constreturn“文学 “; ; int main() Book*pb; pb=new Novel(); cout pb- Category(); delete pb; return0; 若程序运行时输出结果是 “文学 ”,则横线处缺失的语句是 ( )。 ( A) c
19、har * Category(); ( B) char * Category()const; ( C) virtual char * Category()const; ( D) virtual char * Category()const=0; 37 如下函数模板: template class T Tsquare(T x)return x*x; 其中 T是 ( )。 ( A)函数形参 ( B)函数实参 ( C)模板形参 ( D)模板实参 38 下列函数模板的定义中,合法的是 ( )。 ( A) template typename T Tabs(T X)return x 0?-X: x; (
20、B) template class T T abs(T x)return x 0?-x: x; ( C) template T class T abs(T x)return x 0?-x: x; ( D) template T abs(T x)return x 0?-x: x; 39 在 C+中, cin是一个 ( )。 ( A)类 ( B)对象 ( C)模板 ( D)函数 40 下列控制格式输入 输出的操作符中,能够设置浮点数精度的是 ( )。 ( A) setprecision ( B) setw ( C) seffill ( D) showpoint 二、基本操作题 41 请使用 VC6
21、或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1。程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: Name: Smith Age: 21 ID: 99999 CourseNum: 12 Record: 970 注意:只修改每个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 #include iostream using namespace std; class Studentlnfo protected: ERROR*found* char Name; int Age; int ID: int
22、CourseNum; float Record; public: Studentlnfo(char*name, int Age, int ID, int courseNum, float record); ERROR*found* void Studentlnfo() float AverageRecord() return Record CourseNum; void show()const cout “Name: “ Name “Age: “ Age “ID: “ ID “CoumeNum: “ CourseNum “Record: “ Record endl; ; ERROR*found
23、* Studentlnfo Studentlnfo(char*Name, int Age, int ID, int CourseNum float Record) Name=name; Age=age; this- ID=ID; CourseNum=courseNum; Record=record; int main() Studentlnfo st(“Smith“, 21, 99999, 12, 970); st show(); return0; 三、简单应用题 42 使用 VC6打开考生 文件夹 proj2下的工程 proj2,其中有两个类:一是销售类(sale),用于表示按照一件商品的基
24、本价格进行销售;另一个是打折销售类(DiscountSale)用于表示在基本价格基础上按一个折扣比例进行销售。DiscountSale类继承了 sale类。类的土要数据成员的含义和成员函数的功能要求在程序注释中有说明。请在程序中的横线处填写适当的代码,然后删除横线,完成程序的功能。此程序的正确输出结果应为: Discount item is cheaper Saving is0 1 注意:只能在横线处填写适当 的代码,不要改动程序中的其他内容。 #include iostream using namespace std; class Sale public: Sale();默认构造函数,将 p
25、rice初始化为 0 Sale(double the_price);构造函数,用 the_price初始化 price virtual double bill()const;返回当前商品的价格 (基本价 ) double savings(const Sale&other)const;返回参数 other所引用的对象比 当前对象便宜的差价 protected: double price;商品的基本价格 (不打折的价格 ) ; Sale: Sale(): price(0) Sale: Sale(double the_price): price(the_price) double Sale: bil
26、l()const return price; double Sale: savings(const Sale&other)const *found* _;返回当前对象价格比 other贵多少的差价 class DiscountSale: public Sale打折销售类继承销售类 public: DiscountSale();默认构造函数,将 discount初始化为 0 DiscountSale(double the_price, double the_discount);构造函数, the_price是基本价格; the_discount是折扣百分比 virtual double bill
27、()const;返回本商品销售价格 (即打折以后的 实际售价,覆盖了基类的 bill函数 ) protected: double discount;折扣百分比。例如降价至原价的 70,此成员值应为 70 ; DiscountSaie: DiscountSale(): discount(0) DiscountSale: DiscountSale(double the_price, double the_discount) : Sale(the_price), discount(the_discount) double DiscountSale: bill()const doubte fracti
28、on=discount 100; *found* _;返回本对象打折以后的实际售价 bool operator (const Sale&first, const Sale& second) *found* _;判断是否 first价格低于 second价格 int main() Sale simple(10 00); DiscountSale discount(11 00, 90); if(discount simple) cout “Discount item is cheaper n“: *found* 这里输出购买 discount比购买 simple节省多少钱 cout “Saving
29、 is“ _ endl; else cout “Discount item is not cheaper n“: return0; 四、综合 应用题 43 请使用 VC6或使用【答题】菜单打开考生目录 proj3下的工程文件 proj3,此工程中包含一个源程序文件 proj3 cpp,补充编劓 C+程序 proj3 cpp,其功能是读取文本文件 in dat中的全部内容,将文本存放到 doc类的对象 myDoc中。然后将myDoc中的字符序列反转,并输出到文件 out dat中。文件 in dat的长度不大于1000字节。 要求: 补充编制的内容写在 “ *333*”与 “*66666*”两行
30、之间。实现将 myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。 注意:程序最后已将结果输出到文件 out dat中,输出函数 writeToFile已经给出并且调用。 proj3 cpp 执 nclude iostream #include fstream #include cstring using namespace std; class doc private: char *str;文本字符串首地址 int length;文本字符个数 public: 构造函数,读取文件内容,用于初始化新对象, filename是文件名字符串首地址 doc(char*fi
31、lename); void reverse();将字符序列反转 doc(); void writeToFile(char *filename); ; doc: doc(char *filename) ifstream myFile(filename); int len=1001, tmp; str=new charlen; length=0; while(tmp=myFile get()!=EOF) strlength+=tmp; strlength= 0; myFile close(); void doc: reverse() 将数组 str中的 length个字符中的第一个字符与最后一个字
32、符交换,第二个字符与倒数第二个字符交换 *333* *666* doc: doc() deletestr; void doc: writeToFile(char *filename) ofstream outFile(filename); outFile str; outFile close(); void main() doc myDoe(“in dat“); myDoc reverse(); myDoc writeToFile(“out dat“); 国家二级( C+)机试模拟试卷 167答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 栈是先进后出的线性表,所以 A错误;队列是
33、先进先出的线性表,所以 B错误;循环队列是线性 结构的线性表,所以 C错误。 2 【正确答案】 A 【试题解析】 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为 A。 3 【正确答案】 C 【试题解析】 根据二叉树的基本性质 3:在任意一颗二叉树中,度为 0的叶子结点总是比度为 2的结点多一个,所以本题中是 5+1=6个。 4 【正确答案】 D 【试题解析 】 冒泡排序、直接插入排序与简单选择排序法在最坏情况
34、下均需要比较 n(n-1) 2次,而堆排序在最坏情况下需要比较的次数是 nlog2n。 5 【正确答案】 C 【试题解析】 编译软件、操作系统、汇编程序都属于系统软件,只有 C教务管理系统才是应用软件。 6 【正确答案】 A 【试题解析】 软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误,所以选项 A错误。程序调试的基本步骤有:错误定位、修改设计和代码,以排除错误、进行回归测试,防止引进新的错误。程序调试通常称为 Debug,即排错 。软件测试的基本准则有:所有测试都应追溯到需求、严格执行测试计划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、穷举测试不
35、可能、妥善保存测试计划等文件。 7 【正确答案】 B 【试题解析】 模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。一般较优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,所以 A错误, B正确。耦合性是模块间互相连接的紧密程度的度量而内聚性是指一个模块内部 各个元素间彼此结合的紧密程度,所以 c与 D错误。 8 【正确答案】 A 【试题解析】 数据库应用系统中的核心问题是数据库的设计。 9 【正确答案】 B 【试题解析】 投影运算是指对于关系内的域指定可引入新的运算。本题中 s是在原有关系 R
36、的内部进行的,是由 R中原有的那些域的列所组成的关系。所以选择B。 10 【正确答案】 C 【试题解析】 从 ER图到关系模式的转换是比较直接的,实体与联系都可以表示成关系, ER图中属性也可以转换成关系的属性。 11 【正确答案】 C 【试 题解析】 本题考查整型变量的类型和浮点变量的类型, 42默认为 int型数据, 42后面加上 L后,表示 long型数据, 4 2默认为 double型数据。 12 【正确答案】 B 【试题解析】 本题考查 for循环语句, -i表示用之前先减 1,邯么这个 fnr循环语句只有 50到 2时才会输出 “*”,所以总共输出 49次。 13 【正确答案】 A
37、 【试题解析】 本题考查指针和引用。 为引用,使用正确; 中 r表示一个地址,而 *p已经是一个值了,不能将一个指针赋值给一个值,所以编译错误。 14 【正确答案 】 D 【试题解析】 本题考查 C+基本控制结构, A、 B、 C三个选项中的大括号不是必须的,而 D选项中的函数体必须使用大括号。 15 【正确答案】 D 【试题解析】 本题考查 C+关键字,属于基本常识,显然 D选项不正确。 16 【正确答案】 C 【试题解析】 所谓函数重载是指同一个函数名可以对应着多个函数的实现。每种实现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参数的个数不同,但不能只有函数的返回值
38、类型不同而参数的个数和类型相同的重载。所以本题答案为 C。 17 【正确答案】 A 【试题解析】 重载运算符的规则如下: C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5个; 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。故本题答案为 A。 18 【正确答案】 A 【试题解析】 函数参数的 3种传递方式: 将变量名 作为形参和实参,即传值方式; 传递变量指针; 引用形参。
39、其中 B、 C选项都是传递变量指针, D选项为引用形参,所以本题答案为 A。 19 【正确答案】 D 【试题解析】 非成员函数重载用友元函数的形式实现, “-”运算符重载分为前置和后置两种重载方式。用友元函数来实现 “-”运算符的重载时,前置 “-”运算符的重载的一般格式为: friend tyl)e operator-(ClassName&);后置 +运算符的重载的一般格式为: friend type operator-(ClassName&, int)。所以答案为 D。 20 【正确答案】 C 【试题解析】 函数参数的 3种传递方式: 将变量名作为形参和实参,即传值方式; 传递变量指针;
40、引用形参。本题中实参 x为传值方式,所以 x的值不会改变; y为引用形参,所以会改变。故本题答案为 C。 21 【正确答案】 C 【试题解析】 C+不能重载的运算符只有 5个,即 “ ”、 “ *”、 “: ”、“?: ”、 “sizeof”,故本题答案为 C。 22 【正确答案】 C 【试题解析】 重载运算符的规则如下: C+不允许用户自己定义 新的运算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5个; 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少
41、应有一个是类对象,即不允许参数全部是 C+的标准类型。故本题答案为 C。 23 【正确答案】 A 【试题解析】 类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。 24 【正确答 案】 B 【试题解析】 本题考查构造函数,本题中对类中的 a数据成员先是赋值为 0,当定义了对象 obj时,执行构造函数,将 a的值变为了 1,所以输出 1。 25 【正确答案】 B 【试题解析】 类的成员访问权限有 3种: public(公用 )、 protected(保护 )、private(私有 )。 26 【正确答案】 D 【试题解析】 在销毁派生
42、类对象时,先调用派生类的析构函数,再调用基类的析构函数。 27 【正确答案】 C 【试题解析】 本题考查 3种继承方式,其中,基类的私有成员始终 为基类私有。所以派生类无法访问基类的私有成员。本题答案为 C。 28 【正确答案】 B 【试题解析】 本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为私有,即 a为私有变量。所以本题答案为 B。 29 【正确答案】 D 【试题解析】 本题考查默认构造函数和带参数的构造
43、函数以及析构函数,本题中定义了一个对象 A(3),对象带着参数,所以执行带参数的构造函数,输出 3,然后执行析构函数,输出 destructor。所以本题答案为 D。 30 【正确答案】 B 【试题解析】 本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a以及对象数组 b2,共执行 3次构造函数,对象指针不调用构造函数。所以本题答案为 B。 31 【正确答案】 C 【试题解析】 本题考查默认构造函数,题目中定义一个对象 A、 B以及对象数组Point3,又定义了对象 C,共执行 6次构造函数, number变为了 6,所以本题答案为 C。 32 【正确答案】 C 【试题解析】 本题考
44、查默认构造函数,当 i=0、 1时, fun(Sample(i)为 1;当 i=2时, fun(Sample(i)为 2;当 i=3时, fun(Sample(i)为 6;当 i=4时, fun(Sample(i)为 24;当 i=5时, fun(Sample(i)为 120。所以总和为 154。 33 【正确答案】 C 【试题解析】 本题考查公用继承和保护继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私 有。在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。本题中 Derired1公用继承
45、Base,所以 编译正确, Derived2保护继承 Base,所以 编译不正确。 34 【正确答案】 C 【试题解析】 本题考查派生类的构造函数和基类的构造函数。本题中类 B继承类 A,定义了一个类 B的对象并初始化 b(2),此时会执行类 B的构造函数,执行的结果是继承类 A中的私有成员赋值了 12,给类 B自身的数据成员 x赋值了 2,执行 b dispb()后,输出类 A的私有成员 x,输出类 B自身 的数据成员,所以答案为 C。 35 【正确答案】 C 【试题解析】 本题考查公用继承和保护继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有
46、成员仍为基类私有。保护成员不能被类外访问,但是可以被派生类的成员函数访问。 Type成为派生类的保护成员,可以被派生类访问, title仍为基类私有,派生类不能直接访问。所以答案为 C。 36 【正确答案】 D 【试题解析】 本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被 “初始化 ”为 0的函数,包含纯虚函数的 类为抽象类,抽象类是不能被实例化的,但是可以定义指向抽象类数据的指针变量,当派生类成为具体类后,就可以用这种指针指向派生类的对象,然后通过该指针调用虚函数,实现多态性的操作。所以本题答案为 D。 37 【正确答案】 C 【试题解析】 本题考查模板函数的基本概念,根据模板函数的定义, T是模板形参,所以答案为 C。 38 【正确答案】 A 【试题解析】 本题考查模板函数的基本概念,根据模板函数的定义,所以答案为A。 39 【正确答案】 B 【试题解析】 本题考查流对象 cin,属于基础知 识, cin是输入流对象,负责从键盘获取数据,然后送到内存。本题答案为 B。 40 【正确答案】 A 【试题解析】 iomanip中定义的操纵符包括: