C试题附答案.doc

上传人:坚持 文档编号:4043062 上传时间:2019-09-15 格式:DOC 页数:14 大小:68.50KB
下载 相关 举报
C试题附答案.doc_第1页
第1页 / 共14页
C试题附答案.doc_第2页
第2页 / 共14页
C试题附答案.doc_第3页
第3页 / 共14页
C试题附答案.doc_第4页
第4页 / 共14页
C试题附答案.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、C+ 试题一、 选择题:1. 关于类和对象不正确的说法是( C )A) 类是一种类型,它封装了数据和操作B) 对象是类的实例C) 一个类的对象只有一个D) 一个对象必属于某个类2. 在类定义的外部,可以被访问的成员有( C )A) 所有类成员 B) private 或 protected 的类成员C) public 的类成员 D) public 或 private 的类成员3. 关于 this 指针的说法错误的是( A )A) this 指针必须显示说明 B) 当创建一个对象后,this 指针就指向该对象C) 成员函数拥有 this 指针 D) 静态成员函数不拥有 this 指针4. 声明一个

2、类的对象时,系统自动调用( B )函数,撤消对象时,系统自动调用( C )函数A) 成员函数 B) 构造函数 C) 析构函数 D) 普通函数5. 下面对构造函数的不正确描述是( B )A) 系统可以提供默认的构造函数 B) 构造函数可以有参数,所以可以有返回值C) 构造函数可以重载 D) 构造函数可以设置默认参数6. 下面对析构函数的正确描述是( C )A) 系统不能提供默认的析构函数 B) 析构函数必须由用户定义C) 析构函数没有参数 D) 析构函数可以设置默认参数7. 对静态成员的不正确描述是( C )A) 静态成员不属于对象,是类的共享成员 B) 静态数据成员要在类外定义和初始化C) 调

3、用静态成员函数时要通过类或对象激活,所以静态成员函数拥有 this 指针D) 非静态成员函数也可以操作静态数据成员8. 下面选项中,不是类的成员函数为( C )A) 构造函数 B) 析构函数 C)友元函数 D) 缺省参数的构造函数方言9. 下面对友元的错误描述是( D )A) 关键字 friend 用于声明友元 B) 一个类的成员函数可以是另一个类的友元C) 友元函数访问对象的成员不受访问特性影响 D) 友元函数通过 this 指针访问对象成员10. 在 C+中,类与类之间的继承关系具有( C )A) 自反性 B) 对称性 C) 传递性 D) 反对称性11. 下列关于类的继承描述中,( A )

4、是错误的A) 派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数B) 派生类也是基类,但基类不一定具有派生类的全部属性和方法C) 继承描述类的层次关系,派生类可以具有与基类相同的属性和方法D) 一个基类可以有多个派生类,一个派生类可以有多个基类12. 当一个派生类仅有继承一个基类时,基类中的所有公有成员成为派生类的( A )A) public 成员 B) private 成员 C) protected 成员 D) 友元13. 当一个派生类私有继承一个基类时,基类中的所有仅有成员和保护成员成为派生类的( B )A) public 成员 B) private 成员 C) protecte

5、d 成员 D) 友元14. 不论派生类以何种方法继承基类,都不能使用基类的( B )A) public 成员 B) private 成员 C) protected 成员 D) public 成员和 protected 成员15. 下面描述中,错误的是( BC )(两个答案)A) 在基类定义的 public 成员在公有继承的派生类中可见,也能在类外被访问B) 在基类定义的 public 和 protected 成员在私有继承的派生类中可见,在类外可以被访问C) 在基类定义的 public 和 protected 成员在保护继承的派生类中不可见D) 在派生类中不可见的成员要变成可访问的,需要进行访

6、问声明16. 在 C+中,不能被派生类继承的函数是( BC )(两个答案)A) 成员函数 B) 构造函数 C) 析构函数 D) 静态成员函数17. 在创建派生类对象时,构造函数的执行顺序是( D )A) 对象成员构造函数、基类构造函数、派生类本身的构造函数B) 派生类本身的构造函数、基类构造函数、对象成员构造函数C) 基类构造函数、派生类本身的构造函数、对象成员构造函数D) 基类构造函数、对象成员构造函数、派生类本身的构造函数18. 当不同的类具有相同的间接基类时,有特点( AD )(两个答案)A) 各派生类对象将按继承路线产生自己的基类版本B) 派生类对象无法产生自己的基类版本C) 为了建立

7、惟一的间接基类版本,在基类定义前加 virtual 即可D) 为了建立惟一的间接基类版本,应该声明虚继承19. 在 C+中,要实现动态联编,必须使用( D )调用虚函数A) 类名 B) 派生类指针 C) 对象名 D) 基类指针20. 下列函数中,可以作为虚函数的是( CD )(两个答案)A) 普通函数 B) 构造函数 C)成员函数 D) 析构函数 21. 在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( B )A) 不同 B) 相同 C) 相容 D) 部分相同22. 下面函数原型声明中,( B )声明了 fun 为虚函数A) void fun()=0

8、; B) virtual void fun()=0; C) virtual void fun(); D) virtual void fun();23. 若一个类中含有纯虚函数,则该类称为( D )A) 基类 B) 纯基类 C) 派生类 D) 抽象类24. 假设 A 为抽象类,下列声明( B )是正确的A) A fun(int); B) A *p; C) int fun(A); D) A Obj;25. 下面描述中,正确的是( BD )(两个答案)A) 虚函数是没有实现的函数 B) 纯虚函数的实现在派生类中C) 抽象类是没有纯虚函数的类 D) 抽象类指针可以指向不同的派生类26. 关于函数模板,

9、描述错误的是( A )A) 函数模板必须由程序员实例化为可执行的函数模板B) 函数模板的实例化由编译器实现C) 一个类定义中,只要有一个函数模板,则这个类是类模板D) 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化27. 下列的模板说明中,正确提( AD )(两个答案)A) template B) template C) template D) template 28. 假设有函数模板定义如下:Template Max(T a, T b, T 下列选项正确的是( AD )(两个答案)A) float x,y; float z; Max(x,y,z);B) int x,y,z

10、; Max(x,y,z);C) int x,y; float z; Max(x,y,z);D) float x; int y, z; Max(x,y,z);29. 关于类模板,描述错误的是( D )A) 一个普通基类不能派生类模板B) 类模板从普通类派生,也可以从类模板派生C) 根据建立对象时的实际数据类型,编译器把类模板实例化为模板类D) 函数的类模板参数须通过构造函数实例化30. 建立类模板对象的实例化过程为( C )A) 基类 派生类 B) 构造函数 对象C) 模板类 对象 D) 模板类 模板函数31. 在 C+中,容器是一种( D )A) 标准类 B) 标准对象 C) 标准函数 D)

11、标准类模板32. 下列类中( BD )(两个答案)不是输入/输出流类 iostream 的派生类A) fstream B) ofstream C) strstream D)ostrstream33. 在下列选项中( BCD )(三个答案)是 ostream 类的对象A) cin B) cerr C) clog D) cout34. read 函数的功能是从输入流中读取( D )A) 一个字符 B) 当前字符 C) 一行字符 D) 指定若干个字符35. 下列选项中,用于清除基数格式位置以十六制输出的语句是( B )A) coutsetf(ios:hex, ios:basefield);36. 下

12、列格式控制符,在 iostream.h 中定义的是( AD )(两个答案),在iomanip.h 中定义的是( BC )(两个答案)A) endl B) setfill C) setw D) oct37. 下列串流类,在 strstream.h 中定义的是( BD )(两个答案),在 sstream.h中定义的是( AC )A) istringstream B) istrstream C) ostringstream D) ostrstream38. 包含类 fstream 定义的头文件是( A )A) fstream.h B) ofstream.h C) ifstream.h D) iost

13、ream.h39. 要求打开文件 d:file.dat,可写入数据,正确的语句是( D )A) ifstream infile(“d:file.dat”, ios:in);B) ifstream infile(“d:file.dat”, ios:in);C) ofstream infile(“d:file.dat”, ios:out);D) fstream infile(“d:file.dat”, ios:in| ios:out);40. 假定已定义浮点型变量 data,以二进制方式把 data 的值写入输出文件流对象outfile 中去,正确的语句是( C )A) outfile.write

14、(float *) B) outfile.write(float *) C) outfile.write(char *) D) outfile.write(char *) 二、 简答题:1. 什么是预编译,何时需要预编译:回答:总是使用不经常改动的大型代码体。 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。2. C 和 C+有什么不同?从机制上:c 是面向过程的(但 c 也可以编写面向对象的程序);C+是面向对象的,提供了类。但是,C+编写面向对象的程序比 C 容易从适用的方向:C 适合要求代码体积小的,效率高的场合

15、,如嵌入式;C+适合更上层的,复杂的; llinux 核心大部分是 c 写的,因为它是系统软件,效率要求极高。从名称上也可以看出,C+比 C 多了+,说明 C+是 C 的超集;那为什么不叫 C+而叫 C+呢,是因为 C+比C 来说扩充的东西太多了,所以就在 C 后面放上两个+;于是就成了 C+C 语言是结构化编程语言,C+是面向对象编程语言。C+侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。3. C 和 C+中的 struct 有什么不同?回答:C 和 C+中 struct 的主要区别是 C 中的 struct 不可以含有成员函数,而 C+中的 struct可以。C+中 struct

16、和 class 的主要区别在于默认的存取权限不同,struct 默认为public,而 class 默认为 private4. 多态的实现机制。 回答:虚函数表和动态联编。 5. 纯虚函数的概念,有什么作用。 回答:基类中要派生类必须只继承其接口且必须由派生类自己提供相应的实现的函数。其作用就是建立一个公共的接口。 6. 简述使用友元函数的优点和缺点。回答:友元函数的优点:不需要修改类的成员函数而可以访问类的私有成员,并且提高了执行效率。 缺点:破坏了类的封装性及信息的隐蔽性。8. 多态。overload 和 override 的区别。回答:重载在相同范围(同一个类中),函数名字相同,参数不同

17、,virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,不同的范围,函数名字相同,参数相同,基类函数必须有 virtual 关键字。9. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?答:一些变量整个程序中都是可见的,它们称为全局变量,一些变量在函数内部定义且只在函数中可知,则称为局部变量。全局变量由编译器建立且存放在内存的全局数据区,局部变量存放在栈区三、有关内存的思考题1. void GetMemory(char *p)p = (char *)malloc(100);void Test(void) char *str = NULL;GetMemory(str);strcpy(str, “hello world“);printf(str);请问运行 Test 函数会有什么样的结果?回答:程序崩溃。因为 GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。strcpy(str, “hello world“);将使程序崩溃。2. char *GetMemory(void)char p = “hello world“;return p;void Test(void)char *str = NULL;str = GetMemory();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 参考答案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。