c++期末考试试卷加答案(共61页).doc
精选优质文档-倾情为你奉上模拟题一一、单项选择题(本大题共10 小题,每小题2 分,共20 分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将其代码填在题后的括号内。错选或未选均无分。1.在C+中,函数原型不能标识( )A.函数的返回类型 B.函数参数的个数 C.函数参数类型 D.函数的功能2.在C+程序中,对象之间的相互通信通过( )A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现3.对于任意一个类,析构函数的个数最多为( )A.0 B.1 C.2 D.34.下面函数模板定义中不正确的是( )A.template<class Q> B.template<class Q>QF(Qx) QF(Qx)return Q+x return x+x; C.template<class T>D.template<class T>TF(Tx) TF(Tx)return x*x return x>1 5.友元关系不能( )A.继承 B.是类与类的关系C.是一个类的成员函数与另一个类的关系 D.提高程序的运行效率6.语句ofstream f(SALARY.DAT,ios:appios:binary)的功能是建立流对象f,试图打开文件SALARY.DAT 并与之连接,并且( )A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件7.下面说法正确的是( )A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字inline 定义8.可以用p.a 的形式访问派生类对象p 的基类成员a,其中a 是( )A.私有继承的公有成员 B.公有继承的私有成员C.公有继承的保护成员 D.公有继承的公有成员9.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( )A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针10.对于类定义class Apublic:virtual void func1( ) void func2( ) class B:public Apublic:void func1( )cout<<class B func 1<<end1virtual void func2( )cout<<class B func 2<<end1下面正确的叙述是( )A. A:func2( )和B:func1( )都是虚函数B. A:func2( )和B:func1( )都不是虚函数C. B:func1( )是虚函数,而A:func2( )不是虚函数D. B:func1( )不是虚函数,而A:func2( )是虚函数二、填空题(本大题共10 小题,每小题2 分,共20 分)不写解答过程,将正确的答案写在每小题的横线处。错填或不填均无分。11.定义类的动态对象数组时,系统只能够自动调用该类的_构造函数对其进行初始化。12.在C+程序设计中,建立继承关系倒挂的树应使用_继承。13.表达式cout<<end1 还可表示为_。14.基类的公有成员在派生类中的访问权限由_决定。15.C+支持的两种多态性分别是_多态性和_多态性。16.C+中语句const char * const p=hello;所定义的指针p 和它所指的内容都不能被_。17.假定AB 为一个类,则语句AB(AB&x);为该类_构造函数的原型说明。18.将关键字const 写在成员函数的_和_之间时,所修饰的是this 指针。19.在C+中,访问一个对象的成员所用的运算符是_,访问一个指针所指向的对象的成员所用的运算符是_。20.派生类从一个或多个以前定义的该类的_模拟题一参考答案一、单项选择题(本大题共10 小题,每小题2 分,共20 分)1.D 2.B 3.B 4.A 5.A6.A 7.B 8.D 9.C 10.C第二部分非选择题(共80 分)二、填空题(本大题共10 小题,每小题2 分,共20 分)11.无参12.单一(或单)13.cout<<n(或cout<<12,或cout<<xA,或其它等价形式)14.访问控制(或其它等价形式)15.编译时的(或静态,或操作重载)运行时的(或动态,或虚函数)16.改变(或重新赋值)17.复制初始化(或拷贝)18.函数头(或参数表) 函数体19.成员选择运算符(或“.”) 成员访问运算符(或“>”)20.基类模拟题二一、单项选择题(每题2分,共20分)1. 派生类对象可访问基类中的什么成员( )A.公有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.私有继承的公有成员2. 定义析构函数时,应该注意( )。 A.其名与类名完全相同 B.返回类型是void类型 C.无形参,也不可重载 D.函数体中必须有delete语句3. 如果类A被说明成类B的友元,则( )。 A.类A的成员即类B的成员 B.类B的成员即类A的成员 C.类A的成员函数不得访问类B的成员 D.类B不一定是类A的友元 4. 应在下列程序划线处填入的正确语句是( ) #include class Base public: void fun()cout<<"Base:fun"<<endl; ; class Derived:public Base void fun() _ / 显示调用基类的函数fun() cout<<"Derived:fun"<<ENDL; ; Afun(); B. Base.fun(); C. Base:fun(); D. Base->fun();5. 面向对象程序设计将数据与( )放在一起,做为一个相互依存、不可分割的整体来处理。 A. 对数据的操作 B. 信息 C. 数据隐藏 D. 数据抽象6. 在类中声明转换函数时不能指定( )。 A. 参数 B. 访问权限 C. 操作 D. 标识符 7. 在派生类中重新定义虚函数时必须在( )方面与基类保持一致。 A. 参数类型 B. 参数名字 C. 操作内容 D. 赋值8. 下面关于C+中类的继承与派生的说法错误的是( )。A基类的protected成员在公有派生类的成员函数中可以直接使用B基类的protected成员在私有派生类的成员函数中可以直接使用C公有派生时,基类的所有成员访问权限在派生类中保持不变D基类的protected成员在保护派生类的成员函数中可以直接使用9. 重载赋值操作符时,应声明为( )函数。 A. 友元 B. 虚 C. 成员 D. 多态10. 语句 ofstream f(SALARY.DAT,ios:appios:binary); 的功能是建立流对象 f,试图打开文件 SALARY.DAT 并与之连接,并且 ( ) A. 若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件 B. 若文件存在,将其置为空文件;若文件不存在,打开失败 C. 若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件 D. 若文件存在,打开失败;若文件不存在,建立一个新文件 二、填空题(每空2分,共30分)1. 假定 AB 为一个类,则语句 AB(AB&x) ;为该类 _ 构造函数的原型说明。2. C+ 支持的两种多态性分别是 _ 多态性和 _ 多态性。3. 定义类的动态对象数组时,系统只能够自动调用该类的 _ 构造函数对其进行初始化。4. 运算符重载时,其函数名由 构成。成员函数重载双目运算符时,左操作数是 ,右操作数是 。5. C+标准库中的异常层次的根类为 类;MFC类库中绝大多数类都源自根类 类。6. 在下面横线处填上适当字句,完成类中成员函数的定义。 class A int * a; public: A(int aa=0) a=_; / 用 aa 初始化 a 所指向的动态对象 A()_;/ 释放动态存储空间 ; 7C+支持面向对象程序设计的四个要素是:封装性、继承性、 和 。8模板分为 模板和 模板。模拟题二参考答案一、单项选择题(每题2分,共20分)1A2. C3. D4. C5. A6. A7. A8. C9. C10. A二、填空题(每空2分,共30分)1. 拷贝或复制2. 运行(时) 编译(时)(二者位置可互换)(或改为静态和动态也可)3. 无参(缺省或默认均可)4. operator运算符(运算符可写为,若没写扣1分) (当前)对象 函数的形参(参数)5. exception(若e写为大写字母则扣0.5分,单词稍微写错扣0.5分)CObject(字母CO为大写字母,写为小写各扣0.5分)6. new int(aa)delete a(有new、delete各给1分,int给0.5分)7. 抽象性多态性(二者位置可互换)8. 类函数(二者位置可互换)模拟题三一、单项选择题(每题2分,共20分)1. 在下面选项中,对类的拷贝构造函数的声明形式是( )A. A:A(&) B. A:A(constA&) C. A:A(A) D. void A:A(A&a)2. 下面关于成员函数特征的描述中,错误的是( )A成员函数不可以设置参数的默认值 B成员函数可以重载C成员函数可以是内联函数 D成员函数可以是静态的3. 下面关于类模板叙述不正确的是( ) A可以有多个构造函数 B. 类模板是模板类的实例C. 一个类模板可以用来实例化多个模板类 D. 类模板可以有多个参数4. 要使一个类成为抽象类,这个类应具有的条件是( )A至少有一个纯虚函数 B. 至少有一个虚函数C. 只含有一个纯虚函数 D. 只含有一个虚函数5. 有关运算符重载正确的描述是( )A. C+语言允许在重载运算符时改变运算符的操作个数B. C+语言允许在重载运算符时改变运算符的优先级C. C+语言允许在重载运算符时改变运算符的结合性D. C+语言允许在重载运算符时改变运算符的原来的功能6. 下列说法正确的是( )。A. 一个类的对象可以是另一个类的成员B. 一个类可以作为另一个类的派生类C. 一个类可以在另一个类定义体进行定义D. 以上说法均正确7. 有如下程序: #include <iostream.h>class BASEchar c; public:BASE(char n):c(n) virtualBASE()cout<<c; ; class DERIVED:public BASE char c; public: DERIVED(char n):BASE(n+1),c(n) DERIVED()cout<<c; ; int main() DERIVED('X'); return 0; 执行上面的程序将输出( )。A)X B)YX C)XY D)Y8. 类MyClass的定义如下:class MyClass public:MyClass()value=0;SetValue(int i)value=i; private: int value;则对语句:MyClass *p,my;p=&my;正确的描述是( )。A. 语句p=&my;是把对象my赋值给指针变量p;B. 语句MyClass *p,my;会调用两次类MyClass的构造函数C. 对语句*p.SetValue(5)的调用是正确的D. 语句p->SetValue(5)与my.SetValue(5)等价9. 下列各类函数中, 不是类的成员函数。A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数10. 派生类的对象对它的基类成员中 是可以访问的。A. 公有继承的公有成员 B. 公有继承的私有成员 C. 公有继承的保护成员 D. 私有继承的公有成员二、填空题(每空2分,共30分)1. 定义内联函数所用的关键字 ,定义友元所用的关键字为 。2. 当一个派生类具有多个基类时,这种继承方式称为_ _。3. 通过一个构造函数调用虚函数时,C+系统对该调用采用 联编。4. 任何类中允许有 、 、 三种访问控制类型的成员,数据成员和成员函数的默认类型为 。5. 只有在 继承的情况下,基类和派生类之间才有赋值兼容性规则。6. C+标准库中的异常层次的根类定义在库的头文件 中。7. 运算符重载使用的两种方式是 和 。8. C+支持面向对象程序设计的四个要素是:抽象性、 、 和 。模拟题三参考答案一、单项选择题(每题2分,共20分)1B2. A3. B4. A5. D6. D7. C8. D9. C10. A二、填空题(每空2分,共30分)9. inline friend10. 多重继承11. 静态12. privateprotectedpublic(三者位置可以互换)private13. 公有14. exception.h15. 成员函数友元函数(二者位置可互换)多态性继承性封装性(三者位置可互换)模拟题四一、单项选择题(每题2分,共20分)1. 下面有关构造函数和new运算符关系正确的说法是( )Anew运算符不调用构造函数 B. 构造函数一定调用new运算符C当生成新类的实例时,先调用new运算符,再调用构造函数进行初始化D. 当new运算符动态产生类的对象时,new运算符也自动调用构造函数2. 下面有关类性质的说法错误的是( ) A.一个类可以有多个构造函数,但只有一个析构函数B.析构函数和构造函数都不能有返回类型C.不能给析构函数指定参数D.一个类中不可以声明具有类类型的数据成员3. 下面关于友元函数描述正确的是( )A友元函数是类的成员B友元函数在类的外部声明C友元函数在类中声明D. 友元函数能够派生4. 下面叙述正确的是( ) A. 派生类不可以使用私用派生B. 保护派生时,基类的保护成员在派生类中是公有的C. 对基类成员的访问允许二义性D. 赋值兼容规则也适用于多重继承的组合5. 有关运算符重载正确的描述是( )A. C+语言允许在重载运算符时改变运算符的操作个数B. C+语言允许在重载运算符时改变运算符的优先级C. C+语言允许在重载运算符时改变运算符的结合性D. C+语言允许在重载运算符时改变运算符的原来的功能6. 下面描述中,表达错误的是( ) A. 公有继承时基类中的public成员在派生类中仍是public的 B. 公有继承是基类中的private成员在派生类中仍是private的 C. 公有继承时基类中的protected成员在派生类中仍是protected的D. 私有继承时基类中的public成员在派生类中是private的7. 拷贝构造函数的参数是( )A. 某个对象名 B. 某个对象的成员名 C. 某个对象的引用名 D. 某个对象的指针名8. 下列关于构造函数的描述中,错误的是( )A构造函数可以设置默认参数 B.构造函数在定义类对象时自动执行C构造函数可以是内联函数 D.构造函数不可以重载9. 数组作为函数的形参时,把数组名作为实参,传递给函数的是( )A该数组的首地址 B该数组的元素个数C该数组中的各元素值 D该数组的大小10. 通过一个析构函数调用虚函数时,C+系统对该调用采用()。A. 动态联编 B. 静态联编 C. 不确定是哪种联编 D.函数重载二、填空题(每空2分,共30分)1成员名限定的符号是 ,它可以在引用成员时避免 。2只有在 继承的情况下,基类和派生类之间才有赋值兼容性规则。3. 模板分为 模板和 模板。4. 在用class定义一个类时,数据成员和成员函数的默认访问权限是 。5. 已知int DBL(int n)return n+n;和long DBL(long n)return n+n;是一个函数模板的两个实例,则该函数模板的定义是 。(要求写出函数模板的完整定义)6. 静态数据成员必须在 进行初始化。7. 含有纯虚函数的类称为 。8. 若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show()则在类外对该成员的函数进行调用的方式可以为 和 。9. 定义内联函数所用的关键字为 ,定义友元所用的关键字为 。10. 使用成员函数重载运算符时,若运算符是二元的,则参数表中有 个操作数,此时 作为此运算符的左操作数。模拟题四参考答案一、单项选择题(每题2分,共20分)1 D 2 D 3 C 4 D 5 D 6 B 7 C 8 D 9 A 10 B 二、填空题(每空2分,共30分)1. : 二义性 2. 公有 3. 类 函数 4. private5. template<class T> T DBL(T n)return n+n; 6. 类外 7. 抽象类 8. aQueue.show() Queue:show() 9. inline friend 10 1 当前对象 模拟题五 一、单项选择题(每题2分,共20分)1. 下面有关重载函数的说法中正确的是( ) A重载函数必须具有不同的返回值类型;B重载函数形参个数必须不同; C重载函数必须有不同的形参列表D重载函数名可以不同; 2. 使用string类建立对象的不正确方式是()。A. string str(“OK”); B. string str=”OK”; C. string str; D. string str=OK;3. 面关于C+中类的继承与派生的说法错误的是( )A基类的protected成员在公有派生类的成员函数中可以直接使用B基类的protected成员在私有派生类的成员函数中可以直接使用C私有派生时,基类的所有成员访问权限在派生类中保持不变D继承可以分为单一继承与多重继承4. 面向对象程序设计将数据与( )放在一起,做为一个相互依存、不可分割的整体来处理。A. 对数据的操作B. 信息C. 数据隐藏D.数据抽象5. 一个类的析构函数 。A.唯一的 B.允许重载 C.至多可有两个 D.只能是缺省的6. 下列各类函数中,( )不是类的成员函数。A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数7. 在下面选项中,对类的拷贝构造函数的声明形式是( )AA:A(&) B. A:A(constA&) C. A:A(A) D. void A:A(A&a)8. 下面关于静态成员描述正确的是( )A. 静态成员是对象的数据成员B. 静态成员是对象的成员C. 静态成员是对象的成员函数D. 静态成员不是对象的成员9. 下面关于关于成员函数特征的描述中,错误的是( )A成员函数不可以设置参数的默认值 B成员函数可以重载C成员函数可以是内联函数D成员函数可以是静态的10. 下面叙述正确的是( )A基类的保护成员在派生类中仍然是保护的B基类的公有成员在派生类中仍然是公有的C基类的私有成员在派生类中是私有的D从基类派生时,可以有3种派生方法二、改错题,指出程序中的错误并改正之。1. class base int a;public:int b;int f(int i,int j);class derive:baseint c;public:int base:b; base:f(int i,int j); ; 1 2 2. #include <iostream.h>class Apublic:void A(int i=0)m=i;void show()cout<<m;void A()private:int m; ;void main()A a(5);a.m+=10;a.show();3 4 5 3. #include<iostream>using namespace std;class base int a;static int b;public:base(int m,int n):a(m),b(n)static int geta()return a;static int getb()return b;void show()cout<<geta()<<”,”<<getb()<<endl;base:int b=45;void main()6 7 8 模拟题五参考答案一、单项选择题(每题2分,共20分)1 C 2 D 3 C 4 A 5 A 6 C 7 B 8 B 9 A 10 D 二、改错题,指出程序中的错误并改正之。1 int base:b; 2 base:f(int i,int j);1 base:b; (或访问声明仅仅调整名字的访问,不可为它说明任何类型) 2 base:f; (或访问声明不应说明函数参数)3 void A(int i=0)m=i;4 void A()5 a.m+=10;3 构造函数去掉void(或构造函数不能指定返回值类型)4 析构函数去掉void(或析构函数不能指定返回值类型)5 对象不能访问私有成员 6 base(int m,int n):a(m),b(n)7 static int geta()return a;8 base:int b=45;6 不能通过构造函数初始化静态数据成员(只要把b(n)去掉即可) 7 静态成员函数中不能引用非静态成员数据成员(或去掉static) 8 int base:b = 45; 三、改错题,指出程序中的错误并改正之。1. Template<class T>T fun(T x) T y;y=T-2*x;retrun y;1 2 2. class base public: f(); f(int a); f(char *p);class derive:base public: void f(int s); base:f;3 3. #include <iostream.h>class A public: void setA(int); void showA(); private: int a;class B public: void setB(int); void showB(); private: int b;class C : public A, private B public: void setC(int, int, int); void showC(); private: int c;void A:setA(int x) a=x; void B:setB(int x) b=x; void C:setC(int x, int y, int z) a=x; b=y; setA(x); setB(y); c=z;1 Template<class T>2 y=T-2*x; 3 base:f;4 a=x;5 b=y;6 obj.setB(6);7 obj.showB();8 return 0;1 改为template<class T> 2 T不能用作-的操作数 3 派生类中具有与基类同名的函数,则基类中的此函数不能在派生类中进行访问声明 4 派生类不能访问基类A类的私有成员5 派生类不能访问基类B类的私有成员6 不能访问B类的公有成员setB 7 不能访问B类的公有成员showB 8 去掉此语句,或主函数的返回值void去掉或改为int C+面向对象程序设计模拟试题一 一、填空1在类中必须声明成员函数的 原型 ,成员函数的 实现 部分可以写在类外。2如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是 引用 类型或 指针 类型。3 抽象 类只能作为基类使用,而不能声明它的对象。4进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参 个数 或 类型 必须不同。5函数的递归调用是指函数直接或间接地调用 自身 。6拷贝构造函数的形参必须是 本类对象的引用 。二、阅读下列程序,写出其运行时的输出结果 如果程序运行时会出现错误,请简要描述错误原因。1请在以下两题中任选一题,该题得分即为本小题得分。如两题都答,则取两题得分之平均值为本小题得分。(1)程序:专心-专注-专业#include <iostream.h>#include <string.h>class Base private: char msg30; protected: int n; public: Base(char s,int m=0):n(m) strcpy(msg,s); void output(void) cout<<n<<endl<<msg<<endl; ;class Derived1:public Baseprivate:int n;public:Derived1(int m=1):Base("Base",m-1) n=m; void output(void) cout<<n<<endl; Base:output();class Derived2:public Derived1private:int n;public:Derived2(int m=2):Derived1(m-1) n=m; void output(void) cout<<n<<endl; Derived1:output();int main()Base B("Base Class",1);Derived2 D;B.output();D.output();运行结果:1Base Class210Base(2)程序:#include <iostream.h>class Samppublic:void Setij(int a,int b)i=a,j=b;Samp()cout<<"Destroying."<<i<<endl;int GetMuti()return i*j; protected:int i;int j;int main()Samp *p;p=new Samp5;if(!p)cout<<"Allocation errorn"return 1;for(int j=0;j<5;j+)pj.Setij(j,j);for(int k=0;k<5;k+)cout<<"Muti"<<k<<" is:" <<pk.GetMuti()<<endl;deletep;return 0;运行结果:Muti0 is:0Muti1 is:1Muti2 is:4Muti3 is:9Muti4 is:16Destroying.4Destroying.3Destroying.2Destroying.1Destroying.02请在以下两题中任选一题,该题得分即为本小题得分。如两题都答,则取两题得分之平均值为本小题得分。(1)程序:#include <iostream.h>#include <stdlib.h>class Vector public: Vector(int s=100); int& Elem(int ndx); void Display(void); void Set(void); Vector(void); protected: int size; int *buffer