《c++程序设计》课件第2部分 补充习题答案.doc

上传人:eieieie 文档编号:21713026 上传时间:2023-11-03 格式:DOC 页数:18 大小:130.50KB
返回 下载 相关 举报
《c++程序设计》课件第2部分 补充习题答案.doc_第1页
第1页 / 共18页
《c++程序设计》课件第2部分 补充习题答案.doc_第2页
第2页 / 共18页
《c++程序设计》课件第2部分 补充习题答案.doc_第3页
第3页 / 共18页
《c++程序设计》课件第2部分 补充习题答案.doc_第4页
第4页 / 共18页
《c++程序设计》课件第2部分 补充习题答案.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《《c++程序设计》课件第2部分 补充习题答案.doc》由会员分享,可在线阅读,更多相关《《c++程序设计》课件第2部分 补充习题答案.doc(18页珍藏版)》请在三一文库上搜索。

1、第2部分 补充习题第1章 面向对象程序设计概述一、选择题1、C+是( C )。 A 面向对象的程序设计语言 B 结构化程序设计语言 C 既是面向对象的程序设计语言又是结构化的程序设计语言 D 非结构化的程序设计语言2、C+语言属于( D )。 A 机器语言 B 低级语言 C 中级语言 D 高级语言3、下面关于对象概念的描述中,错误的是( A )。A 对象就是C语言中的结构变量B 对象代表着正在创建的系统中的一个实体C 对象是一个属性和操作(或方法)的封装体 D 对象之间的信息传递是通过消息进行的4、下面关于类概念的描述中,错误的是( D )。A 类是抽象数据类型的实现B 类是具有共同行为的若干

2、对象的统一描述体C 类是创建对象的样板 D 类就是C语言中的结构体类型5、下列关于C+类的描述中错误的是( C )。A 类与类之间可以通过一些手段进行通信和联络B 类用于描述事物的属性和对事物的操作C 类与类之间必须是平等的关系,而不能组成层次关系D 类与类之间可以通过封装而具有明确的独立性6、面向对象程序设计思想的主要特征中不包括( D )。A 封装性 B 多态性 C 继承性 D 功能分解,逐步求精二、填空题1、构成对象的两个主要因素是 属性 和 行为 ,其中 属性 用于描述对象的静态特征, 行为 用于描述对象的动态特征。2、类和对象的关系可表述为:类是对象的 抽象 ,而对象则是类的 实例

3、。3、封装包含两方面含义,一是用 对象 把 属性和操作这些属性的操作 包装起来,二将对象中某些部分 对外隐藏 。4、 继承 是指特殊类自动地拥有或隐含地复制其一般类的全部属性与操作。5、面向对象的软件工程包括的五个阶段为: 面向对象分析 , 面向对象设计 , 面向对象编程 , 面向对象测试 , 面向对象维护 。第2章 C+基础知识一、选择题1、下列关于C+语言的发展说法错误的是( C )。A C+语言起源于C语言 B C+语言最初被称为“带类的C”C 在1980年C+被命名 D 在1983年C+被命名2、C+语言是以 语言为基础逐渐发展而演变而成的一种程序设计语言。( B )A Pascal

4、B C C Basic D Simula673、下列关于C+与C语言关系的描述中错误的是( C )。A C+是C语言的超集 B C+是C语言进行了扩充C C+和C语言都是面向对象的程序设计语言 D C+包含C语言的全部语法特征4、下列C+标点符号中表示行注释开始的是( C )。A # B ; C / D 5、每个C+程序都必须有且仅有一个( B )。A 预处理命令 B 主函数 C 函数 D 语句6、C+对C语言做了很多改进,下列描述中哪一项使得C语言发生了质变,即从面向过程变成面向对象( D )。A 增加了一些新的运算符 B 允许函数重载,并允许设置默认参数 C 规定函数说明必须用原型 D 引

5、进类和对象的概念7、对定义重载函数的下列要求中,错误的是( D )。A 要求参数的个数不同 B 要求参数中至少有一个类型不同C 要求参数个数相同时,参数类型不同 D 要求函数的返回值不同8、在函数的返回值类型与返回值表达式的类型的描述中,错误的是( B )。A 函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的B 函数返回值的类型就是返回值表达式的类型C 函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成返回值类型D 函数返回值类型确定了返回值表达式的类型9、下列不正确的选项是( D )。A C+语言是一种既支持面向过程程序设计,又支持面向对象程序设计的混合型语言B 关键

6、字是在程序中起分割内容和界定范围作用的一类单词C iostream是一个标准的头文件,定义了一些输入输出流对象D 类与类之间不可以进行通信和联络10、下列表示引用的方法中,正确的是( A )。已知:int k=1000;A int &x=k; B char &y; C int &z=1000; D float &t=&k;二、填空题1、C+既可以用来进行面向 对象 程序设计,又可以进行面向 过程 程序设计。2、常量分成两种,一种是 直接 常量,另一种是 符号 常量。3、 引用 就是某一变量的别名,对其操作与对变量直接操作完全一样。4、按函数在语句中的地位分类,可以有以下3种函数调用方式: 函数

7、语句 , 函数表达式 , 函数参数 。5、函数与引用联合使用主要有两种方式:一是 函数的参数是引用 ;二是 函数的返回值是引用 。6、头文件由三部分内容组成: 头文件开头处的文件头注释 , 预处理块 , 函数和类结构声明 。三、程序阅读题1、分析下面的执行结果#includeusing namespace std;int main() int a,b,sum; / 定义a,b,sum三个整型变量 a=43; / 把整数常量赋给变量a b=37; sum=a+b; / a与b相加的和赋给变量sum coutThe sum issum; coutendl; / endl 是回车换行的作用retur

8、n 0; 2、分析以下程序的执行结果 #include using namespace std;int main() int a; int &b=a; /变量引用 b=10; couta=aendl; return 0; 3、下列程序的执行结果为#includeusing namespace std;void mian() int n=10; int* pn=&n; int* &rn=pn; (*pn)+; coutn=nendl; (*rn)+; cout”n=”nendl;4、下面程序的运行结果是#includeusing namespace std;void fun(int &a,int

9、 &b) int p; p=a; a=b; b=p;void exchange(int &a,int &b,int &c) if(ab)fun(a,b); if(ac)fun(a,c); if(bc)fun(b,c);int main() int a,b,c; a=12; b=639; c=78; exchange(a,b,c); couta=a,b=b,c=cendl; return 0;5、下面的程序输出结果为#includeusing namespace std;int main() int *ir; int i; ir=&i; i=17; coutint i=iendl; coutin

10、t ir=*irendl; 6、下面程序的输出结果为 #includeusing namespace std;int fun(char *s);int main()cout ”运算符,通过对象访问公有成员是使用“ . ”运算符。9、假定AB是一个类,则语句 AB(const AB &) 是该类拷贝构造函数的原形说明。10、析构函数在对象的 生命周期结束 时被自动调用,全局对象和静态对象的析构函数在 main函数执行完毕或调用exit函数结束时 调用。三、程序分析题1、写出程序的运行结果includeusing namespace std;Class MyClass public: int nu

11、mber; void set(int i); ;int number=3;void MyClass:set(int i) number=i;void main() MyClass my1; int number=10; my1.set(5); coutmy1.numberendl; my1.set(number); coutmy1.numberendl; my1.set(:number); coutmy1.number;2、分析以下程序的执行结果 #include class Sample int x; public: Sample(); Sample(int a)x=a; Sample(Sa

12、mple &a)x=a.x+1; void disp()coutx=xendl; ; void main() Sample s1(2),s2(s1); s2.disp(); 3、分析以下程序的执行结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int i,int j)x=i;y=j; void copy(Sample &s); void setxy(int i,int j)x=i;y=j; void print()coutx=x,y=yendl; ; void Sample:copy(Sample &s) x=s.

13、x;y=s.y; void func(Sample s1,Sample &s2) s1.setxy(10,20); s2.setxy(30,40); void main() Sample p(1,2),q; q.copy(p); func(p,q); p.print(); q.print(); 4、分析以下程序的执行结果#include class Sample public: int x; int y; void disp() coutx=x,y=yendl; ; void main() int Sample:*pc; Sample s; pc=&Sample:x; s.*pc=10; pc

14、=&Sample:y; s.*pc=20; s.disp(); 5、写出下面程序的执行结果#include class Sample int A; static int B; public: Sample(int a)A=a,B+=a; static void func(Sample s); ; void Sample:func(Sample s) coutA=s.A,B=Bendl; int Sample:B=0; void main() Sample s1(2),s2(5); Sample:func(s1); Sample:func(s2); 第4章 继承与组合一、选择题1、下面对派生类的

15、描述中,错误的是( D)。 一个派生类可以作为另一个派生类的基类 派生类至少有一个基类 派生类的成员除了它自己的成员外,还包含了它的基类的成员 派生类中继承的基类成员的访问权限到派生类中保持不变2、在多继承中,公用继承和私有继承对于基类成员在派生类中的可访问性与单继承的规则是(A )。 完全相同 完全不同 部分相同,部分不同 以上都不对3、下面叙述不正确的是( D )。 派生类一般都是公用派生 对基类成员的访问必须是无二义性的 赋值兼容规则也适用于多重继承的场合 基类的公用成员在派生类中仍然是公用的4、下面叙述不正确的是(A )。 基类的保护成员在派生类中仍然是保护的 基类的保护成员在公用派生

16、类中仍然是保护的 基类的保护成员在私有派生类中仍然是私有的 对基类成员的访问必须是无二义性的5、当保护继承时,基类的(B )在派生类中成为保护成员,不能通过派生类的对象来直接访问。 任何成员 公用成员和保护成员 公用成员和私有成员 私有成员6、若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的( D )。 任何成员 公用成员 保护成员 私有成员7、设置虚基类的目的是( B)。 简化程序 消除二义性 提高运行效率 减少目标代码8、继承具有(B ),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。 规律性 传递性 重复性 多样性9、在公用继承情

17、况下,有关派生类对象和基类对象的关系,不正确的叙述是( C)。 派生类的对象可以赋给基类的对象 派生类的对象可以初始化基类的引用 派生类的对象可以直接访问基类中的成员 派生类的对象的地址可以赋给指向基类的指针10、有如下类定义:class MyBASEpublic: void set(int n) k=n ; int get()const return k ;protected: int k; ;class MyDERIVDE: protected MyBASE public: void set(int m. int n) MyBASE:set(m); j=n; int get()const

18、return MyBASE:get()+j;protected: int j ;则类MyDERIVDE中保护的数据成员和成员函数的个数是( C )。 4 3 2 111、有如下程序:#include using namespace std;class A pubilc: A( ) cout “A” ; ;class B public :B( ) cout “B” ; ;class C : public A public : C( ) cout “C ”; private: B b ;int main ( ) C obj ; return 0 ; 执行后的输出结果是( D )。 CBA BAC

19、ACB ABC12、有如下程序:#include using namespace std;class BASEpublic: BASE( ) cout”BASE” ;class DERIVED : public BASE public : DERIVED( ) cout” DERIVED” ; ;int main ( ) DERIVED X; return 0 ; 执行后的输出结果是( C )。 BASE DERIVED BASE DERIVED DERIVEDBASE13、有如下程序:#includ using namespace std;class Base public: void fu

20、n ( ) cont”Base:fun”endl ;class Derived : public Base public: void fun( ) cout”Derivde:fun”fun() fun();二、填空题1、在C+中,三种继承方式的说明符号为 public 、 private 、 protected ,如果不加说明,则默认的继承方式为 private 。2、当公用继承时,基类的公用成员成为派生类的 公用成员 ;保护成员成为派生类的 保护成员 ;私有成员成为派生类的 不可访问成员 。3、当保护继承时,基类的公用成员成为派生类的 保护成员 ;保护成员成为派生类的 保护成员 ;私有成员成

21、为派生类的 不可访问成员 。4、当私有继承时,基类的公用成员成为派生类的 私有成员 ;保护成员成为派生类的 私有成员 ;私有成员成为派生类的 不可访问成员 。5、多继承时,多个基类中同名成员在派生类中由于标识符不唯一而出现 二义性 。第5章 多态性与虚函数一、选择题1、向不同的对象发送统一消息可导致完全不同的行为的现象称为( A )。A 多态性 B 抽象 C 继承 D 封装2、多态调用是指( C )。A 以任何方式调用一个虚函数B 以任何方式调用一个纯虚函数C 借助于指向对象的基类指针或引用调用一个虚函数D 借助于指向对象的基类指针或引用调用一个纯虚函数3、下面关于抽象类说法不正确的是( C

22、)。A 抽象类是指具有纯虚函数的类B 一个声明有纯虚函数的基类一定是抽象类C 可以用抽象类定义对象D 抽象类中可以进行构造函数的重载4、在C+中,用于实现运行时多态性的是( D )。 A 内联函数 B 重载函数 C 模板函数 D 虚函数5、关于纯虚函数,下列表述正确的是( B )。A 纯虚函数是未给出实现版本(即无函数体定义)的虚函数B 纯虚函数的声明总是以“=0”结束C 派生类必须实现基类的纯虚函数D 含有纯虚函数的类一定是派生类6、关于虚函数,下列表述正确的是( B )。A 如果在重定义虚函数时使用virtual,则该重定义函数仍然是虚函数B 虚函数不得声明为静态函数C 虚函数不得声明为另

23、一个类的友元函数D 派生类必须重新定义基类的虚函数7、关于纯虚函数和抽象类的描述中,错误的是( A )。 A 纯虚函数是一种特殊的虚函数,它没有具体的定义 B 抽象类是指具有纯虚函数的类 C 抽象类只能作为基类来使用,其纯虚函数的定义由派生类给出 D 一个基类中说明有纯虚函数,该基类的派生类只有实现了基类的所有纯虚函数,才可以用派生类来定义对象。8、下列描述中,是抽象类的特征的是( D )。 A 可以说明虚函数 B 可以进行构造函数的重载 C 可以定义友元函数 D 不能定义其对象9、抽象类应该有( D )。 A 至少一个虚函数 B 至多一个虚函数 C 至多一个纯虚函数 D 至少一个纯虚函数10

24、、关于虚函数的说法正确的是( C )。 A 基类的虚函数可为派生类继承,继承下来仍为虚函数 B 虚函数重定义时必须保证其返回值和参数个数及类型与基类中的一致 C 虚函数必须是一个类的成员函数,不能是友元,也不能是静态函数,但可以作为其他类的友元 D 析构函数和构造函数都可是虚函数,都可被继承二、填空题1、C+中的多态性可以分为4类: 参数多态 、 包含多态 、 重载多态 和 强制多态 。前面两种统称为 通用多态 ,而后面两种统称为 专用多态 。2、向上类型转换是指 把一个派生类的对象作为一个基类的对象来使用 。3、 多态性从实现的角度来讲可以划分为两类: 静态多态行 和 动态多态行 。4、虚函

25、数的声明方法是在函数原型前加上关键字 virtual 。5、如果一个类包含一个或多个纯虚函数,则该类为 抽象类 。第6章 面向对象的妥协一、选择题1、下面关于友元的描述中,错误的是( D )。A 友元函数可以访问该类的私有数据成员。B 一个类的友元类中的成员函数都是这个类的友元函数。C 友元可以提高程序的运行效率。D 类与类之间的友元关系可以继承。2、友元访问类的对象的成员时使用( D )A 类的成员名 B this指针指向成员名C “类名:成员名”的形式 D “对象名.成员名”的形式3、已知类A是类的友元,类B是类C的友元,则( D )。 A 类A一定是类C的友元 B 类C一定是类A的友元

26、C 类C的成员函数可以访问类B的对象的任何成员 D 类A的成员函数可以访问类B的对象的任何成员4、下面对静态数据成员的描述中,正确的是( A )。A 静态数据成员是类的所有对象共享的数据B 类的每个对象都有自己的静态数据成员C 类的不同对象有不同的静态数据成员值D 静态数据成员不能通过类的对象调用二、填空题1、友元可以访问与其有好友关系的类中的 任何成员 。友元包括 友元函数 和 友元类 。2、声明友元的关键字是 friend 。3、类的静态成员包括 静态数据成员 和 静态成员函数 。4、静态数据成员是在 程序编译 时被分配空间的,到 程序结束 时才释放空间。第7章 运算符重载一、 选择题1、

27、下列运算符中,下列哪个运算符在C+中不能重载( C )。A & B C : D new2、下列关于运算符重载的描述中,正确的是( D )。A 运算符重载可以改变操作数的个数 B 运算符重载可以改变优先级C 运算符重载可以改变结合性 D 运算符重载不可以改变语法结构3、在表达式x+y*z中,+是作为成员函数重载的运算符,* 是作为非成员函数重载的运算符。下列叙述中正确的是( C )。 A operator+有两个参数,operator*有两个参数 B operator+有两个参数,operator*有一个参数 operator+有一个参数,operator*有两个参数Doperator+有一个参

28、数,operator*有一个参数4、在下列成对的表达式中,运算符“+”的意义不相同的一对是( C )。 A 5.0+2.0和5.0+2 B 5.0+2.0和5+2.0 C 5.0+2.0和5+2 D 5+2.0和5.0+25、下列关于运算符的重载叙述正确的是( C )。 A 通过运算符重载,可以定义新的运算符 B 有的运算符只能作为成员函数重载 C 若重载运算符+ ,则相应的运算符函数名是+ D 重载一个二元运算符时,必须声明两个形参6、如果表达式+i*k中的“+”和“*”都是重载的友元运算符,若采用运算符函数调用格式,则表达式还可以表示为( B )。A operator*(i.operato

29、r+(),k) B operator*(operator+(i),k)C i.operator+().operator*(k) D k.operator*(operator+(i)7、已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下面关于这个函数叙述错误的是( B )。 A 这是运算符-的重载运算符函数 B 这个函数所重载的运算符是一个一元运算符 C 这是一个成员函数 D 这个函数不改变类的任何数据成员的值8、下列关于运算符的重载说法不正确的是( D )。A 它可以是成员函数 它可以是友元函数 它既不是成员函数也不是友元函数 D 它只能是成员函数

30、二、 填空题1、运算符的重载是对 c+已用的 的运算符赋予多重含义,导致不同行为,定义重载运算符函数的关键字是 operator 。2、要在类的对象上使用运算符,除了运算符 = 和 & 外,都须被重载。3、+中不能被重载的运算符有 . 、 .* 、 : 、 ?: 、 sizeof 。4、重载不改变运算符的 操作数的个数 、 结合性 、 优先级 。5、对双目运算符,被重载为成员函数时,有 1 参数,被重载为友元函数时,有 2 参数。第8章 模板一、选择题1、关于模板函数与函数模板的说法正确的是( C )。 A 其实质是一样的,只是说法不同 B 两者的形参类型是一样的 C 模板函数是模板的实例化

31、D 函数模板是模板函数的实例化2、模板的使用实际上是将类模板实例化成一个( C )。 A 函数 B 对象 C 类 D 抽象类3、类模板的模板参数( D )。A 只可作为数据成员的类型 B 只可作为成员函数的返回类型C 只可作为成员函数的参数类型 D 以上三者均可4、模板的参数( A )。A 可以有多个 不能是基本数据类型C 可以是个 参数不能给初值5、template class apple;定义模板类apple的成员函数的正确格式为( C )。 A T apple:Push(T object) B T apple:Push(T object) C template T apple:Push(

32、T object) D template T apple:Push(T object)6、下列说法正确的是( D )。 函数模板的友元函数必须是模板 模板函数可以被同名的另一个模板函数重载 C 形式参数的名字只能在模板函数的形式参数表中出现一次 D 关键字class定义函数模板类型参数,实际上表示任何用户自定义类型二、填空题1、函数模板使设计与 具体数据类型 无关的通用算法的良好机制,它可以用一种 抽象 数据类型设计通用算法。2、通过关键字 template 可以声明模板,通过关键字 class 或typename 指定函数模板的类型参数,有几个类型参数就有几个关键字,它实际表示 任何标准数据类型或用户自定义数据类型 。3、模板形参表表示将被 替换 的模板参数,模板参数之间用 逗号

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究生考试


经营许可证编号:宁ICP备18001539号-1