C++期末考试复习题.docx
- 文档编号:23797679
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:22
- 大小:24.26KB
C++期末考试复习题.docx
《C++期末考试复习题.docx》由会员分享,可在线阅读,更多相关《C++期末考试复习题.docx(22页珍藏版)》请在冰豆网上搜索。
C++期末考试复习题
一、单项选择题(本大题共10小题,每小题2分,共20分)
1.在C++中,函数原型不能标识(D)
A.函数的返回类型B.函数参数的个数C.函数参数类型D.函数的功能
2.在C++程序中,对象之间的相互通信通过(B)
A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现
3.对于任意一个类,析构函数的个数最多为(B)
5.友元关系不能(A)
A.继承B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.提高程序的运行效率
6.语句ofstreamf(″″,ios:
:
app|ios:
:
binary);的功能是建立流对象f,试图打开文件并与之连接,并且(A)
A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B.若文件存在,将其置为空文件;若文件不存在,打开失败
C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件
D.若文件存在,打开失败;若文件不存在,建立一个新文件
7.下面说法正确的是(B)
A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字inline定义
以用的形式访问派生类对象p的基类成员a,其中a是(D)
A.私有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.公有继承的公有成员
公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是(C)
A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针
于类定义
classA{
public:
virtualvoidfunc1(){}
voidfunc2(){}
};
classB:
publicA{
public:
voidfunc1(){cout<<″classBfunc1″< virtualvoidfunc2(){cout<<″classBfunc2″< }; 下面正确的叙述是(C) A.A: : func2()和B: : func1()都是虚函数B.A: : func2()和B: : func1()都不是虚函数 C.B: : func1()是虚函数,而A: : func2()不是虚函数D.B: : func1()不是虚函数,而A: : func2()是虚函数 第二部分非选择题(共80分) 二、填空题(本大题共10小题,每小题2分,共20分) 11.定义类的动态对象数组时,系统只能够自动调用该类的_无参_______构造函数对其进行初始化。 12.在C++程序设计中,建立继承关系倒挂的树应使用____单_一____继承。 13.表达式cout< 14.基类的公有成员在派生类中的访问权限由___访问控制_____决定。 ++支持的两种多态性分别是__编译时的_(操作重载)_静态_____多态性和_运行时的(虚函数)___动态_____多态性。 ++中语句constchar*constp=″hello″;所定义的指针p和它所指的内容都不能被__改变(重新赋值)____。 17.假定AB为一个类,则语句AB(AB&x);为该类_____拷贝____构造函数的原型说明。 18.将关键字const写在成员函数的____函数头_____和____函数体_____之间时,所修饰的是this指针。 19.在C++中,访问一个对象的成员所用的运算符是__·___,访问一个指针所指向的对象的成员所用的运算符是__>___。 20.派生类从一个或多个以前定义的该类的__基类__ 一、单项选择题(每题2分,共20分) 1.派生类对象可访问基类中的什么成员( A) A.公有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.私有继承的公有成员 2.定义析构函数时,应该注意( C ) A.其名与类名完全相同 B.返回类型是void类型 C.无形参,也不可重载 D.函数体中必须有delete语句 3.如果类A被说明成类B的友元,则(D )。 A.类A的成员即类B的成员 B.类B的成员即类A的成员 C.类A的成员函数不得访问类B的成员 D.类B不一定是类A的友元 4.应在下列程序划线处填入的正确语句是(C) #include class Base { public: void fun(){cout<<"Base: : fun"< }; class Derived: public Base { void fun() {_____________ (); C.Base: : fun(); D. Base->fun(); 5.面向对象程序设计将数据与( A )放在一起,做为一个相互依存、不可分割的整体来处理。 A.对数据的操作B.信息C.数据隐藏D.数据抽象 6.在类中声明转换函数时不能指定( A )。 A.参数 B.访问权限 C.操作 D.标识符 7.在派生类中重新定义虚函数时必须在( A )方面与基类保持一致。 A.参数类型 B.参数名字 C.操作内容 D.赋值 8.下面关于C++中类的继承与派生的说法错误的是(C)。 A.基类的protected成员在公有派生类的成员函数中可以直接使用 B.基类的protected成员在私有派生类的成员函数中可以直接使用 C.公有派生时,基类的所有成员访问权限在派生类中保持不变 D.基类的protected成员在保护派生类的成员函数中可以直接使用 9.重载赋值操作符时,应声明为( C )函数。 A.友元 B.虚 C.成员 D.多态 10.语句 ofstream f(″″,ios: : app|ios: : binary); 的功能是建立流对象 f,试图打开文件 并与之连接,并且 (A ) A. 若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件 B. 若文件存在,将其置为空文件;若文件不存在,打开失败 C. 若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件 D. 若文件存在,打开失败;若文件不存在,建立一个新文件 二、填空题(每空2分,共30分) 1.假定 AB 为一个类,则语句 AB(AB&x) ;为该类 _________ 复制构造函数的原型说明。 2.C++ 支持的两种多态性分别是 ________编译时的_ 多态性和 运行时的_________ 多态性。 3.定义类的动态对象数组时,系统只能够自动调用该类的 无参的_________ 构造函数对其进行初始化。 4.运算符重载时,其函数名由__operator运算符_构成。 成员函数重载双目运算符时,左操作数是_当前对象__,右操作数是__函数形参_。 C++标准库中的异常层次的根类为exception_____类;MFC类库中绝大多数类都源自根类__CObject_____类。 在下面横线处填上适当字句,完成类中成员函数的定义。 class A{ int * a; public: A(int aa=0) { a=_newint(aa)______;在下面选项中,对类的拷贝构造函数的声明形式是(B) A.A: : A(&)B.A: : A(constA&)C.A: : A(A)D.voidA: : A(A&a) 2.下面关于成员函数特征的描述中,错误的是(A) A.成员函数不可以设置参数的默认值B.成员函数可以重载C.成员函数可以是内联函数D.成员函数可以是静态的 3.下面关于类模板叙述不正确的是(B) A.可以有多个构造函数B.类模板是模板类的实例C.一个类模板可以用来实例化多个模板类D.类模板可以有多个参数 4.要使一个类成为抽象类,这个类应具有的条件是(A) A.至少有一个纯虚函数 B.至少有一个虚函数C.只含有一个纯虚函数 D. 只含有一个虚函数 5.有关运算符重载正确的描述是(D) A.C++语言允许在重载运算符时改变运算符的操作个数B.C++语言允许在重载运算符时改变运算符的优先级 C.C++语言允许在重载运算符时改变运算符的结合性D.C++语言允许在重载运算符时改变运算符的原来的功能 6.下列说法正确的是(D)。 A.一个类的对象可以是另一个类的成员B.一个类可以作为另一个类的派生类 C.一个类可以在另一个类定义体进行定义D.以上说法均正确 7.有如下程序: #include<> classBASE{ charc; public: BASE(charn): c(n){} virtual~BASE(){cout< }; classDERIVED: publicBASE { charc; public: DERIVED(charn): BASE(n+1),c(n){} ~DERIVED(){cout< }; intmain() { DERIVED('X'); return0; } 执行上面的程序将输出(C)。 A)X B)YX C)XY D)Y 8.类MyClass的定义如下: classMyClass {public: MyClass(){value=0;} SetValue(inti){value=i;} private: intvalue; }; 则对语句: MyClass*p,my;p=&my;正确的描述是(D)。 A.语句p=&my;是把对象my赋值给指针变量p;B.语句MyClass*p,my;会调用两次类MyClass的构造函数 C.对语句*(5)的调用是正确的D.语句p->SetValue(5)与(5)等价 9.下列各类函数中,C不是类的成员函数。 A.构造函数B.析构函数C.友元函数D.拷贝构造函数 10. 派生类的对象对它的基类成员中A是可以访问的。 A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员 二、填空题(每空2分,共30分) 1.定义内联函数所用的关键字inline,定义友元所用的关键字为friend。 2.当一个派生类具有多个基类时,这种继承方式称为_多重继承__。 3.通过一个构造函数调用虚函数时,C++系统对该调用采用静态联编。 4.任何类中允许有_privated____、public____、_protected____三种访问控制类型的成员,数据成员和成员函数的默认类型为__privated___。 5.只有在公有继承的情况下,基类和派生类之间才有赋值兼容性规则。 6.C++标准库中的异常层次的根类定义在库的头文件_ ______中。 7.运算符重载使用的两种方式是_____成员函数______和友元函数_______。 8.C++支持面向对象程序设计的四个要素是: 抽象性、多态性________、封装性________和____继承性____。 一、单项选择题(每题2分,共20分) 1.下面有关构造函数和new运算符关系正确的说法是(D) A.new运算符不调用构造函数B.构造函数一定调用new运算符 C.当生成新类的实例时,先调用new运算符,然后调用构造函数进行初始化 D.当new运算符动态产生类的对象时,new运算符也自动调用构造函数 2.下面有关类性质的说法错误的是(D) A.一个类可以有多个构造函数,但只有一个析构函数B.析构函数和构造函数都不能有返回类型 C.不能给析构函数指定参数D.一个类中不可以声明具有类类型的数据成员 3.下面关于友元函数描述正确的是(C) A.友元函数是类的成员B.友元函数在类的外部声明C.友元函数在类中声明D.友元函数能够派生 4.下面叙述正确的是(D) A.派生类不可以使用私用派生B.保护派生时,基类的保护成员在派生类中是公有的 C.对基类成员的访问允许二义性D.赋值兼容规则也适用于多重继承的组合 5.有关运算符重载正确的描述是(D) A.C++语言允许在重载运算符时改变运算符的操作个数B.C++语言允许在重载运算符时改变运算符的优先级 C.C++语言允许在重载运算符时改变运算符的结合性D.C++语言允许在重载运算符时改变运算符的原来的功能 6.下面描述中,表达错误的是(B)? ? ? ? A.公有继承时基类中的public成员在派生类中仍是public的B.公有继承是基类中的private成员在派生类中仍是private的 C.公有继承时基类中的protected成员在派生类中仍是protected的 D.私有继承时基类中的public成员在派生类中是private的 7.拷贝构造函数的参数是(C) A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名 8.下列关于构造函数的描述中,错误的是(D) A.构造函数可以设置默认参数B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数D.构造函数不可以重载 9.数组作为函数的形参时,把数组名作为实参,传递给函数的是(A) A.该数组的首地址B.该数组的元素个数C.该数组中的各元素值D.该数组的大小 10.通过一个析构函数调用虚函数时,C++系统对该调用采用( B)。 A.动态联编B.静态联编C.不确定是哪种联编D.函数重载 二、填空题(每空2分,共30分) 1.成员名限定的符号是: : ,它可以在引用成员时避免二义性。 2.只有在公有继承的情况下,基类和派生类之间才有赋值兼容性规则。 3.模板分为类模板和函数模板。 4.在用class定义一个类时,数据成员和成员函数的默认访问权限是private。 5.已知intDBL(intn){returnn+n;}和longDBL(longn){returnn+n;}是一个函数模板的两个实例,则该函数模板的定义是template<typename T> T DBL(T n){return n+n}。 (要求写出函数模板的完整定义) 6.静态数据成员必须在类外进行初始化。 7.含有纯虚函数的类称为抽象类。 8.若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show()则在类外对该成员的函数进行调用的方式可以为()和Queue: : show()。 9.定义内联函数所用的关键字为inline,定义友元所用的关键字为friend。 10.使用成员函数重载运算符时,若运算符是二元的,则参数表中有1个操作数,此时 当前对象作为此运算符的左操作数。 一、单项选择题(每题2分,共20分) 1.下面有关重载函数的说法中正确的是(C) A.重载函数必须具有不同的返回值类型; B.重载函数形参个数必须使用string类建立对象的不正确方式是(D)。 A.stringstr(“OK”);B.stringstr=”OK”;C.stringstr;D.stringstr=’OK’; 3.面关于C++中类的继承与派生的说法错误的是(C) A.基类的protected成员在公有派生类的成员函数中可以直接使用 B.基类的protected成员在私有派生类的成员函数中可以直接使用 C.私有派生时,基类的所有成员访问权限在派生类中保持不变 D.继承可以分为单一继承与多重继承 4.面向对象程序设计将数据与(A)放在一起,作为一个相互依存、不可分割的整体来处理。 A.对数据的操作B.信息C.数据隐藏D.数据抽象 5.一个类的析构函数A。 A.唯一的B.允许重载C.至多可有两个D.只能是缺省的 6.下列各类函数中,(C)不是类的成员函数。 A.构造函数B.析构函数C.友元函数D.拷贝构造函数 7.在下面选项中,对类的拷贝构造函数的声明形式是(B) A.A: : A(&)B.A: : A(constA&)C.A: : A(A)D.voidA: : A(A&a) 8.下面关于静态成员描述正确的是(B) A.静态成员是对象的数据成员B.静态成员是对象的成员C.静态成员是对象的成员函数D.静态成员不是对象的成员 9.下面关于成员函数特征的描述中,错误的是(A) A.成员函数不可以设置参数的默认值B.成员函数可以重载C.成员函数可以是内联函数D.成员函数可以是静态的 10.下面叙述正确的是(D) A.基类的保护成员在派生类中仍然是保护的B.基类的公有成员在派生类中仍然是公有的 C.基类的私有成员在派生类中是私有的D.从基类派生时,可以有3种派生方法 1.classbase{ inta; public: intb;intf(inti,intj); }; classderive: base{ intc; public: intbase: : b; base: : f(inti,intj); }; [1] [2] 2.#include<> classA{ public: voidA(inti=0){m=i;} voidshow(){cout< void~A(){} private: intm;}; voidmain() { Aa(5); +=10; (); } [3] [4] [5] 3.#include usingnamespacestd; classbase{ inta; staticintb; public: base(intm,intn): a(m),b(n){} staticintgeta(){returna;} staticintgetb(){returnb;} voidshow(){cout< }; base: : intb=45; voidmain(){} [6] [7] [8] [1]intbase: : b; [2]base: : f(inti,intj); [1]base: : b;(或访问声明仅仅调整名字的访问,不可为它说明任何类型) [2]base: : f;(或访问声明不应说明函数参数) [3]voidA(inti=0){m=i;} [4]void~A(){} [5]+=10; [3]构造函数去掉void(或构造函数不能指定返回值类型) [4]析构函数去掉void(或析构函数不能指定返回值类型) [5]对象不能访问私有成员 [6]base(intm,intn): a(m),b(n){} [7]staticintgeta(){returna;} [8]base: : intb=45; [6]不能通过构造函数初始化静态数据成员(只要把b(n)去掉即可) [7]静态成员函数中不能引用非静态成员数据成员(或去掉static) [8]intbase: : b=45; 1.Template Tfun(Tx) { Ty; y=T-2*x; retruny; } [1] [2] 2.classbase { public: f(); f(inta); f(char*p); }; classderive: base { public: voidf(ints); base: : f; }; 3.#include<> classA {public: voidsetA(int); voidshowA(); private: inta; }; classB {public: voidsetB(int); voidshowB(); private: intb; }; classC: publicA,privateB {public: voidsetC(int,int,int); voidshowC(); private: intc; }; voidA: : setA(intx) {a=x;} voidB: : setB(intx) {b=x;} voidC: : setC(intx,inty,intz) { a=x; b=y; setA(x); setB(y); c=z; } [1]Template [2]y=T-2*x; [1]改为template [2]T不能用作-的操作数 [3]base: : f; [3]派生类中具有与基类同名的函数,则基类中的此函数不能在派生类中进行访问声明 [4]a=x; [5]b=y; [6](6); [7](); [8]return0; [4]派生类不能访问基类A类的私有成员 [5]派生类不能访问基类B类的私有成员 [6]不能访问B类的公有成员setB [7]不能访问B类的公有成员showB [8]去掉此语句,或主函数的返回值void去掉或改为int 一、填空(每题2分,共20分) 1、C++程序中,对象的初始化和清理工作,分别由两个特殊的成员函数()和()来完成。 2、在c++中,分别用(变量)与(函数)来表现某种事物的所具有的属性和行为,并且将它们封装在一起,形成一种抽象数据类型——类。 3、当用一个对象初始化另一个新的同类对象,将调用(),其特殊之处在于: 形参是()。 4、模板是C++支持参数化的工具,我们通常用类模板和函数模板,这些只是面向对象的()性的一个方面。 5、如果在某个类定义中用关键字()声明了一个外部函数(也许是其他类的一个成员)后,这个外部函数就可以例外的访问该类的任何成员,这个外部函数称为类的()函数。 6、可以将类的成员声明为st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 期末考试 复习题
![提示](https://static.bdocx.com/images/bang_tan.gif)