最新全国计算机等级考试二级c++题库3(共17套)
6第三套
1、在面向对象方法中,实现信息隐蔽是依靠______。
A、对象的继承
B、对象的多态
C、对象的封装
D、对象的分类
信息隐蔽是指采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。
故本题答案为C。
2、下列叙述中正确的是______。
A、为了建立一个关系,首先要构造数据的逻辑关系
B、表示关系的二维表中各元组的每一个分量还可以分成若干数据项
C、一个关系的属性名表称为关系模式
D、一个关系可以包括多个二维表
为了建立一个关系,首先要指定关系的属性,所以选项A是错误的。表示关系的二维表中各元组的每一个分量必须是不可分的基本数据项,所以选项B是错误的。在关系数据库中,把数据表示成二维表,而一个二维表就是一个关系,所以选项D是错误的。一个关系的属性名表称为该关系的关系模式,其记法为:<关系名>(<属性名1>,<属性名2>,…,<属性名n>)。
故本题答案为C。
3、下列叙述中,不符合良好程序设计风格要求的是______。
A、程序的效率第一,清晰第二
B、程序的可读性好
C、程序中要有必要的注释
D、输入数据前要有提示信息
要形成良好的程序设计风格,主要应注重和考虑下述一些因素:符号名的命名应具有一定的实际含义,以便于对程序功能的理解;正确的注释能够帮助读者理解程序;程序编写应优先考虑清晰性,除非对效率有特殊要求,程序编写要做到清晰第一,效率第二。
故本题答案为A。
4、一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为______。
A、219
B、221
C、229
D、231
二叉树的性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为70-1=69,该二叉树中的总结点数为70+80+69=219。
故本题答案为A。
5、冒泡排序在最坏情况下的比较次数是______。
A、n(n+1)/2
B、
C、n(n-1)/2
D、n/2
冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。
假设线性表的长度为n,则在最坏的情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。
故本题答案为C。
6、软件调试的目的是______。
A、发现错误
B、改正错误
C、改善软件的性能
D、验证软件的正确性
软件调试的目的是诊断和改正程序中的错误,改正以后还需要再测试。
故本题答案为B。
7、下列叙述中正确的是______。
A、数据库系统是一个独立的系统,不需要操作系统的支持
B、数据库技术的根本目标是要解决数据的共享问题
C、数据库管理系统就是数据库系统
D、以上三种说法都不对
为了解决多用户、多应用共享数据的需求,使数据为尽可能多的应用服务,数据管理的最新技术--数据库技术应运而生。
数据库系统由如下几部分组成:数据库、数据库管理系统、数据库管理员、系统平台(硬件平台和软件平台),所以选项A、C是错误的。
故本题答案为B。
8、下列叙述中正确的是______。
A、数据的逻辑结构与存储结构必定是一一对应的
B、由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构
C、程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构
D、以上三种说法都不对
数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构。一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等。而采用不同的存储结构,其数据处理的效率是不同的。因此,在进行数据处理时,选择合适的存储结构是很重要的,所以选项A是错误的。
根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构和非线性结构,所以选项B是错误的。
数组既可以处理线性结构也可以处理非线性结构,所以选项C是错误的。
故本题答案为D。
9、软件是指______。
A、程序
B、程序和文档
C、算法加数据结构
D、程序、数据与相关文档的完整集合
计算机软件是计算机系统中与硬件相互依存的另一部分,是程序、数据及相关文档的完整集合。
故本题答案为D。
10、下列叙述中正确的是______。
A、程序执行的效率与数据的存储结构密切相关
B、程序执行的效率只取决于程序的控制结构
C、程序执行的效率只取决于所处理的数据量
D、以上三种说法都不对
所谓提高程序执行的效率,主要包括两个方面:一是提高数据处理的速度,二是尽量节省在数据处理过程中所占用的计算机存储空间。
故本题答案为A。
11、如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是______。
A、public和public
B、public和protected
C、protected和public
D、protected和protected
本题考查的是派生类。
派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。此时派生类对基类中各成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性。
故本题答案为D。
12、以下关于类模板的模板参数的叙述中,错误的是______。
A、模板参数可以作为数据成员的类型
B、模板参数可以作为成员函数的返回类型
C、模板参数可以作为成员函数的参数类型
D、模板参数不能作为成员函数的局部变量的类型
本题考查模板的作用。
模板的作用:模板它提供的是一个框架,待你提供真正的参数后,它便有了一个实例。类模板定义不同类型的成员:成员函数、静态数据成员和嵌套的类型。模板参数也可以作为成员函数的局部变量的类型。
故本题答案为D。
13、语句int *p=&k;定义了指针p ,与这个语句等效的语句序列是______。
A、int *p;p=&k;
B、int *p;p=k;
C、int *p;*p=&k;
D、int *p;*p=k;
本题考查的是指针。
一个指针是一个特定类型数据的存储地址,比如一个变量的地址。在使用任何指针变量之前必须先给它赋一个所指合法具体对象的地址值。
语句int *p=&k;定义了一个指向变量k地址的int类型的指针p,此定义方法是在定义过程中同时赋初始值。选项A中int *p;p=&k;是先定义了一个指针p,然后将变量k的地址赋给指针p,与题目中的语句int *p=&k;等效。
故本题答案为A。
14、有如下程序:
#include
using namespace std;
class MyClass{
public:
MyClass(int x):val(x) {}
void Print() const{ cout<<"const:val="< void print() {cout<<"val="< private: int val; }; int main(){ const MyClass obj1(10); MyClass obj2(20); obj1.Print(); obj2.Print(); return 0; } 程序的输出结果是______。 A、val=10 const:val=20 B、const:val=10 const:val=20 C、const:val=10 val=20 D、val=10 val=20 本题考查的是构造函数调用顺序。 const MyClass obj1(10);首先定义了MyClass的const对象obj1,并初始构造函数参数为x=10。构造函数通过:val(x)将x的值给val。 MyClass obj2(20);定义MyClass的对象obj2,并初始构造函数参数为x=20。构造函数通过:val(x)将x 的值给val。 obj1.Print();调用Obj1对象中的Print()函数,输出obj1对象成员变量val的当前值,即输出 const:val=10。 obj2.Print();调用Obj2对象中的Print()函数,输出obj2对象成员变量val的当前值,即输出 const:val=20。 故本题答案为B。 15、有如下程序: #include using namespace std; class Base{ public: void output() { cout<<1;} virtual void Print(){cout<<'B';} }; class Derived : public Base{ public: void output() {cout<<2;} void Print() { cout<<'D';} }; int main(){ Base *ptr=new Derived; ptr->output(); ptr->Print(); delete ptr; return 0; } 程序的输出结果是______。 A、1B B、1D C、2B D、2D 本题考查的是虚函数。 virtual void Print(){cout<<'B';}表示这方法是虚函数,虚函数的意思是如果子类有继承这虚函数,则子类的对象在执行此方法时调用子类的此方法。否则会调用基类的此方法。 在此程序中Derived是子类,Base是基类,Base *ptr=new Derived;创建一个子类的对象给基类的指针对象。 ptr->output();因为指针ptr是基类的对象。所以在执行output()方法时会调用基类的output()方法,也就是Base类的output()方法。不会调用Derived类的output()方法,因为output()不是虚函数。输出1。 ptr->Print(); 因为Print();在基类Base中申明是虚函数,所以在子类中如果有继承此方法就会调用子类的这方法。所以这个调用的是Derived类的Print();方法。输出D。 故本题答案为B。 16、必须用一对大括号括起来的程序段是______。 A、switch语句中的case标号语句 B、if语句的分支 C、循环语句的循环体 D、函数的函数体 本题考查的是函数的函数体。 由一对花括号括起来的<函数体>是语句的序列,它定义了函数应执行的具体操作。 if语句的分支和循环语句的循环体通常使用花括号{}括起来;switch语句中的case标号语句后加的是冒号":"。 故本题答案为D。 17、下列关于运算符重载的描述中,正确的是______。 A、运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符 B、一元运算符只能作为成员函数重载 C、二元运算符重载为非成员函数时,参数表中有一个参数 D、C++中可以重载所有的运算符 本题主要考查了运算符重载。 一元运算符还可以作为全局函数重载,所以选项B错误。 二元运算符重载为非成员函数时,参数表中有两个参数,所以选项C错误。 有些运算符不能被重载,如域运算符(::),条件运算符(?:)等,具体哪些运算符不能被重载与编译器有关,所以选项D错误。 故本题答案为A。 18、C++中的模板包括______。 A、对象模板和函数模板 B、对象模板和类模板 C、函数模板和类模板 D、变量模板和对象模板 本题考查的是C++中的模板,包括函数模板和类模板。 函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。 类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型。 故本题答案为C。 19、如果利用C++流进行输入输出,下面的叙述中正确的是______。 A、只能借助于流对象进行输入输出 B、只能进行格式化输入输出 C、只能借助于cin和cout进行输入输出 D、只能使用运算符>>和<<进行输入输出 本题考查的是C++流的概念。 就像C语言一样,C++语言中也没有输入/输出语句。在C++中,将数据从一个对象到另一个对象的流动抽象为"流",数据的输入与输出就是通过输入/输出流来实现的。C++流可以借助于cin、cout、cerr、clog 进行输入输出;使用运算符">>"、"<<"和get()、getline()、put()、write()函数也可以进行输入输出。 故本题答案为A。 20、在函数中,可以用auto 、extern、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是______。 A、auto B、extern C、register D、static 本题考查的是C++的变量类型。C++中的变量类型分为如下几种: auto--函数内部的局部变量。(auto可以省略不写)一个局部变量如果没有用于存储类别定义符说明时,则自动被说明为auto。 static--静态存储分配,又分为内部和外部静态。 extern--全部变量(用于外部变量说明)。 register--变量存储在硬件寄存器中。 故本题答案为A。 21、下列符号中不属于C++关键字的是______。 A、friend B、namespace C、continue D、byte 本题考查的是C++关键字。 关键字也称保留字,它是由C++语言本身预先定义好的一类单词。 详细请见C++关键字表。 故本题答案为D。 22、有如下头文件: int f1(); static int f2(); class MA{ public: int f3(); static int f4(); }; 在所描述的函数中,具有隐含的this指针的是______。 A、f1 B、f2 C、f3 D、f4 本题考查的是this指针。 this指针式一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针,然后调用成员函数,每次成员函数存取数据成员时,则隐含使用this指针。 this指针是指向对象本身的指针,它只存在于类的非静态成员中。f1,f2不是成员函数,不存在隐含指针;f4为静态成员函数,也不含有this指针;含有this指针的函数在调用时按thiscall调用约定调用。 故本题答案为C。 23、下列各组类型声明符中,含义相同的一组是______。 A、unsigned long int和long B、signed short int和short C、unsigned short和short D、short int和int 本题考查的是符号常量声明。 整型常量除包括基本整型(int)外,还包括短整型(short int)、长整型(long int)、无符号型(unsigned)。若整型常量为无符号型则在表示时需要在前面加上unsigned,若没加unsigned则默认表示为有符号型(signed),因此选项A、C错误; 选项D中int表示整型,short int表示短整型,含义不同,所以错误; 选项B表示有符号的短整型,有符号(signed)可以隐藏,同时short int可以表示为short,因此选项B正确。 故本题答案为B。 24、有以下程序: #include using namespace std; class B{ public: virtual void show(){cout<<"B";} } ; class D: public B{ public: void show() {cout<<"D";} }; void fun1(B *ptr) { ptr->show(); } void fun2(B &ref) { ref.show();} void fun3(B b ) { b.show();} int main(){ B b,*p=new D; D d; fun1(p); fun2(b); fun3(d); return 0; } 程序运行的输出结果是______。 A、BBB B、BBD C、DBB D、DBD 本题考查的是虚函数的用法,及虚函数被继承后的相互调用关系。 首先通过B类生成b对象,通过B类生成*p对象指针并申请D类内存结构赋给*p。然后通过D类生成d。 调用fun1函数,参数地址传递p指针地址。因为B.show()是虚函数,所以调用D.show();输出D。 调用fun2函数,参数引用传递对象b,所以调用B.show();输出B。 调用fun3函数,参数对象d;参数b=d地址。所以调用B.show();输出B。 所以输出结果DBB。 故本题答案为C。 25、若有如下类定义: class B{ void fun1(){} protected: double var 1; public: void fun2(){} }; class D: public B{ protected: void fun3() {} }; 已知obj是类D的对象,下列语句中不违反类成员访问控制权限的是______。 A、obj.fun1(); B、obj.var1; C、obj.fun2(); D、obj.fun3() 本题考查的是类成员的访问控制。 类中提供了3中访问控制权限:公有(public)、私有(private)和保护(protected)。 B类中成员定义访问权限为:fun1()为私有,var1为保护,fun2为公共类D公共继承B类结构,继承结构不改变成员权限。 因为对象外部调用成员,只能访问(公共)Public权限成员,仅fun2()为Public权限。 故本题答案为C。 26、有如下程序: #include using namespace std; class Part{ public: Part(int x=0):val(x) {cout< ~Part(){cout< private: int val; }; class Whole{ public: Whole(int x,int y,int z=0):p2(x),p1(y),val(z) {cout< ~Whole(){cout< private: Part p1,p2; int val; }; int main(){ Whole obj(1,2,3); return 0; } 程序的输出结果是______。 A、123321 B、213312 C、213 D、123123 本题考查的是类以及类的构造函数。 class Whole{ public: Whole(int x,int y,int z=0):p2(x),p1(y),val(z){cout< ~Whole(){cout< private: Part p1,p2;//定义时间的顺序跟那个 int val; }; 在定义类Whole的私有成员时,Part p1,p2; 定义对象p1在p2前。所以在执行Whole(int x,int y,int z=0):p2(x),p1(y),val(z) {cout< Whole obj(1,2,3);创建Whole类对象obj这时调用Whole类的构造方法Whole(int x,int y,int z=0):p2(x),p1(y),val(z) {cout< 方法,输出2,接着构造p2对象,执行p2(1) 输出1。 再执行val(z)给val赋值为3再执行方法体的语句cout< 现在所有对象构造完了,开始析构对象了。因为析构与构造相反,所以先析构z再p2再p1,输出为312。总体输出就是213312。 故本题答案为B。 27、有如下程序: #include using namespace std; class MyClass{ public: MyClass() {++count;} ~MyClass() {--count;} static int getCount() {return count;} private: static int count; int MyClass::count=0; int main(){ MyClass obj; cout< MyClass *ptr=new MyClass; cout< delete ptr; cout< return 0; } 程序的运行结果是______。 A、121 B、232 C、221 D、122 本题考查的是类的构造函数。 int MyClass::count=0;的意思是初始化静态变量count=0; MyClass obj;是指创建类MyClass对象obj,这时会执行类MyClass的构造方法MyClass() {++count;},得到count=1,cout< MyClass *ptr=new MyClass;创建类MyClass指针对象*ptr,这时会执行类MyClass的构造方法MyClass(){++count;}得到count=2,cout< delete ptr;删除指针对象,这时会调用析构方法~MyClass(){--count;},得到count=1, cout< 故本题答案为A。 28、有以下程序: #include using namespace std; class Base{ public: Base(int x=0) {cout< }; class Derived : public Base{ public: Derived(int x=0) {cout< private: Base val; }; int main(){ Derived d(1); return 0; } 程序的输出结果是______。 A、0 C、01 D、001 本题考查的是类的相关知识。 "Base val;"因为类Derived 有个Base类的对象val为私有变量。所以在给这类创建对象时会创建Base val;对象。 在Derived d(1);创建对象d时先创建Base的对象val,执行Base类的Base(int x=0) {cout< 接着创建类Derived对象d 执行类Derived的带一个参数的构造方法Derived(int x=0) {cout< 执行完基类的构造方法后执行自已的构造方法。因为传的参数为1所以输出1。 故本题答案为D。 29、对于一个类定义,下列叙述中错误的是______。 A、如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数 B、如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数 C、如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数 D、如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数 本题考查的是类的定义。 类是一种用户自定义的类型,声明一个类对象时,编译程序需要为对象分配存储空间,进行必要的初始化。在C++中这项工作是由构造函数来完成的。构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一种特定的状态,使该对象具有区别于其他对象特征。构造函数在对象被创建的时候由系统自动调用。 故本题答案为B。 30、关于函数重载,下列叙述中错误的是______。 A、重载函数的函数名必须相同 B、重载函数必须在参数个数或类型上有所不同 C、重载函数的返回值类型必须相同 D、重载函数的函数体可以有所不同 本题考查的是函数的重载。 函数重载允许用同一个函数名定义多个函数。被重载的函数必须要有不同的形参列表。不可以根据函数返回值类型来重载函数。函数重载是用同一个函数名在不同的参数上做不同的事情。对于仅仅是函数的返回值不同,其它参数全部相同,不是重载。如果出现这种况,会在编译产生错误。 故本题答案为C。 31、已知一程序运行后执行的第一个输出操作是 cout< 则此操作的输出结果是______。 A、1234 B、******1234 C、**********1234 D、1234****** "setw(10)"表示要输出10个宽度。 "setfill('*')"表示没有达到宽度要求的用*替换。 "1234"表示操作的数据,因此前应该有6个*。 故本题答案为B。 32、如下函数的作用是以双倍行距输出文件: void double_space(ifstream& f, ofstream& t){ char c; while(______){ ______; if(c=='\n')t.put(c); } } 画线缺失的部分是______。 A、f.get(c)与t.put(c) B、f.put(c)与t.get(c) C、t.get(c)与f.put(c) D、t.put(c)与f.get(c) 本题考查的是文件流的输入输出。 文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。 ifstream是文件输入流类,只能用于输入,它没有提供任何用于输出的操作。 ofstream是文件输出流类,只能用于输出,它没有提供任何用于输入的操作。 fstream是文件输入输出流类。 f.get(c)为获得一个字符; t.put(c)为输出一个字符,因为if(c=='\n') t.put(c);此句,当c为间格字符(行距字符)时,再多输出一次t.put(c)。 故本题答案为A。 33、派生类的成员函数不能访问基类的______。 A、公有成员和保护成员 B、公有成员 C、私有成员 D、保护成员 本题考查的是继承的类型。 类的继承方式有公有继承、保护继承和私有继承三种方式。对于公有继承基类中的成员访问属性不变,对于保护和私有继承基类中的成员转换为相应的访问类型。但是如果基类成员的访问属性为private的,则不能被继承。 故本题答案为C。 34、以下运算符函数中肯定不属于类FunNumber的成员函数的是______。 A、int operator-(FunNumber); B、FunNumber operator-(); C、FunNumber operator-(int); D、int operator-(FunNumber,FunNumber); 本题考查的是类的成员函数。 选项A是重载了负号或减法运算符,由于减法运算符它具有两个操作数,而题面原型中只有一个,如果重载的是减号运算符,则必为成员函数。 选项B中由于没参数,无论是负号或减法运算符至少具有一个参数,所以它必为成员函数,同时也必定是重载了负号运算符。 选项C是必定以成函数的方式重载,因为C++规定不能对内置类的运算符进行重载,所以它不可能是友 元函数(因为操作数为内置的int型),所以必为成员函数重载,且必定是重载了减法运算符。 选项D有两个参数,无论是负号或减法运算符,其操作数不超2个,所以必定为友元函数重载,且重载了减法运算符。 故本题答案为D。 35、下列是重载乘法运算符的函数原型声明,其中错误的是______。 A、MyClass operator * (double,double); B、MyClass operator * (double,MyClass); C、MyClass operator * (MyClass,double); D、MyClass operator * (MyClass,MyClass); 本题考查的是运算符的重载。 重载的运算符应保持其原有的基本语义。重载的运算符应尽可能保持其原有的特性。运算符的重载应当配套。 至少要有一个形式参数是类的类型。所以选项A错。 故本题答案为A。 36、在两种基本测试方法中,______测试的原则之一是保证所测模块中每一个独立路径至少要执行一次。标准答案为:白盒或白箱 白盒测试的基本原则是:保证所测模块中每一独立路径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件下至少执行一次;验证所有内部数据结构的有效性。 37、线性表的存储结构主要分为顺序存储结构和链式存储结构。队列是一种特殊的线性表,循环队列是队列的______存储结构。 标准答案为:顺序 在实际应用中,队列的顺序存储结构一般采用循环队列的形式。 38、对下列二叉树进行中序遍历的结果为______。 标准答案为:ACBDFEHGP 或 A、C、B、D、F、E、H、G、P 或 A,C,B,D,F,E,H,G,P 或 A,C,B,D,F,E,H,G,P 二叉树的中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。遍历的各种形式~牢记~ 39、在E-R图中,矩形表示______。 标准答案为:实体集 在E-R图中,矩形表示实体集。 40、软件需求规格说明书应具有完整性、无歧义性、正确性、可验证性、可修改性等特性,其中最重要的是______。 标准答案为:无歧义性 无歧义性是指对每一个需求只有一种解释,其陈述具有惟一性。作为设计的基础和验收的依据,软件 需求规格说明书应该是精确而无二义的,需求说明书越精确,则以后出现的错误、混淆、反复的可能性越小。 41、已知有函数f 的定义如下: int f(){ static int s = 0; s+=2; return s; } 则在某程序中第2次执行函数调用语句f();时,函数f的返回值是______。 标准答案为:4 本题考查的是static的用法。 static在程序运行的过程中只初始化一次。 第一次运行时,s=2 第二次运行时,s=2+2=4 所以答案为4。 42、请将下列栈类Stack补充完整。 class Stack{ private : int pList[100]; //int 数组,用于存放栈的元素 int top; //栈顶元素(数组下标) public: Stack():top(0){} void Push (const int &item);// 新元素item 压入栈 int Pop (void); // 新栈顶元素弹出栈 }; void Stack::Push(const int &item){ if(top==99) // 如果栈满,程序终止} exit(1); top++; // 栈顶指针增 1 ______; } int Stack::Pop(){ if (top < 0) // 如果栈空,程序终止 exit(1); return pList[top--]; } 标准答案为:pList[top]=item 本题考查堆栈的操作。 由于在本算法中,要弹出栈顶元素,要先将新元素item压入栈,然后取出stack[top]中的元素。 如果栈满,if(top==99),程序终止,栈顶指针增1。 如果栈空,程序终止。 按照堆栈先进后的原则,向堆栈压入的数据总是在最上面的,top为最大记数,所以pList堆栈的第top数组位置将被赋值成压入数据。所以答案为pList[top]=item。 43、已知类sample 是一个抽象类,其成员函数 display 是无形参、无返回类型的纯虚函数,请完成其声 class sample{ public: sample(){}; ______ }; 标准答案为:virtual void display()=0; 本题考查的是纯虚函数。 这是一个纯虚函数定义。它的定义格式是:virtual函数返回类型函数名(参数列表)=0,根据题目的意思,返回类型为空,则用void表示函数名为display参数列表为空,则用()表示结合起来,就是virtual void display()=0;(其中0表示无函数体)。 44、已知如下程序的输出结果是23,请将画线缺失的部分补充完整。 #include using namespace std; class MyClass{ public: void Print() const { cout<<23;} }; int main() { MyClass*p =new MyClass(); ______.Print(); return 0; } 标准答案为:(*p) 本题考查的是指针。 MyClass*p =new MyClass();是创建一个类MyClass的指针对象。要执行创建的对象,那么(*p).Print();即为执行此对象的方法。 45、有如下程序: #include using namespace std; class A { public: A(){cout<<"A";} ~A(){cout<<"A";} }; class B { A a; public: B(){ cout<< "B";} ~B(){cout<<"B";} }; int main(){ B b; return 0; 程序的输出结果是______。 标准答案为:ABBA 本题考查的是类的构造。 main(){B b; 创建类B一个对象b,这时转到类B里去执行类B的构造方法B(),因为在类B里有个全局的类A的对象a,所以在执行构造方法B()之前会先创建类A的对象a,就去执行类A的构造方法A(),输出字符A,再返回到类B执行它的构造方法B()输出字符B,现在所有的构造方法执行完了,就执行析构方法了,因为析构方法与构造方法的执行顺序相反,所以先执行~B()方法输出字符B,再执行~A()输出字符A。所以输出结果ABBA。 46、请将如下程序补充完整,使得输出结果为:bbaa #include using namespace std; class A{ public: ______{cout<<"aa"; } }; class B: public A { public: ~B(){cout<<"bb";} }; int main (){ B *p=new B; delete p; return 0; } 标准答案为:~A() 本题考查的是一个带有指针的类的构造方法。 B *p=new B;这个是创建一个类B的指针对象。在创建时因为类B是公共继承类A,所以会先执行类A的构造方法再执行类B的构造方法。因为这两个类没有重载构造方法,用默认的构造方法,默认的构造方法只创建对象不作任何处理,所以没有任何输出。 delete p;是删除这个指针对象,删除对象就是调用析构方法,因为析构方法的执行与构造相反,所以会先调用类B的析构方法~B()输出bb,再调用它的基类A的析构方法~A()输出aa,所以输出bbaa。 构造方法是以类名为方法名再带参数,比如类A,那么它的构造方法为A()或A(int i)... 析构方法是以~ 加类名为方法名再带参数。比如~A() 或~A(int i)... 47、若有定义语句:int a=3,b=2,c=1;,则表达式a 标准答案为:2 本题考查的是运算符的优先级。 首先a=3,b=2,判断a 48、请在如下程序中的空格处填写正确的语句: # include using namespace std; class Base{ public: void fun() {cout<<"Base fun"< }; class Derived : public Base{ public: void fun(){ ______; // 调用基类的函数fun() cout<<"Derived fun"< } }; 标准答案为:Base::fun() 本题考查的是基类。 本题程序要求运行后输出结果"Base fun"。通过调用基类函数fun(),即运行Base::fun();输出结果"Base fun"。 49、有如下复数类的声明,请补充完整。 class complex{ double real; //实部 double imag;//虚部 public : complex(double x,double y){ real=x; imag=y; } complex operator +(complex c) {//重载加法运算符"+" return complex(______); } }; 标准答案为:real+c.real,imag+c.imag 本题主要考查了形式参数与实在参数,参数值的传递。 根据复数+的运算规则,实数部分为各加数实数部分之和,虚数部分为各加数虚数部分之和。在类complex中,构造函数的第1、2个参数分别表示复数类型的实部与虚部,内部数据成员real与imag分别用来存入复数类型的实部、虚部,故只要将两个complex的"real之和"和"imag之和"分别作为结果complex 对象构造函数的两个参数就行了,所以应填real+c.real,imag+c.imag或等效形式。 50、执行下列语句后,变量sum的值是______。 int sum = 0; for (int i=1;i<=3;i++) for (int j=1;j<=i;j++) sum++; 标准答案为:6 本题考查的是for语句。 本题sum的执行过程是: 当i=1时,内循环中的j的值为1,sum自加一次,此时sum=1; 当i=2时,内循环中的j的值为1和2,sum自加两次,此时sum=3; 当i=3时,内循环中的j的值为1、2、3,sum自加三次,此时sum=6; 所以sum的值为6。