C++填空选择题 下载本文

内容发布更新时间 : 2024/5/8 10:28:22星期一 下面是文章的全部内容请认真阅读。

D. #error

答案:C

解析:(P7)#if条件编译,#include文件包含,#error错误处理。 14. 类的析构函数是对一个对象进行以下哪种操作时自动调用的是() A. 建立 B. 撤销 C. 赋值 D. 引用 答案:B

解析:(P80)删除对象或结束程序时,自动调用析构函数。 15. 关于new运算符的下列描述中,错误的是() A. 它可以用来动态创建对象和对象数组

B. 使用它创建的对象或对象数组可以使用运算符delete删除 C. 使用它创建对象时要调用构造函数 D. 使用它创建对象数组时必须指定初始值 答案:D

解析:(P107)静态成员的特性是静态成员只有一个拷贝(副本),这个副本被所有属于这个类的对象共享。这种共享与全局变量或全局函数相比,既没有破坏数据隐藏的原则,又保证了安全性。静态成员表示整个类范围的信息,其声明以关键字static开始,包括静态数据成员和静态成员函数。在对静态数据成员初始化时应注意:

(1)应在类体外对静态数据成员进行初始化(静态数据成员的初始化与它的访问控制权限无关)。

(2)静态数据成员初始化时前面不加static关键字,以免与一般静态变量或对象混淆。

(3)由于静态数据成员是类的成员,因此在初始化时必须使用作用域运算符(::)限定它所属的 类。因此选择D项。

16. 如果类A被说明成类B的友元,则() A. 类B不一定是类A的友元 B. 类B的成员即类A的成员 C. 类A的成员即类B的成员

D. 类A的成员函数不得访问类B的成员 答案:A

解析:(P113)友元关系不能被继承,友元关系是单向的,友元关系不具有传递性。但是友元函数不是类的成员,所以选择A项。

17. 假定一个类的构造函数为A(int aa,int bb){a=aa++;b=a*++bb;},则执行A x(4,5);语句 后,x.a和x.b的值分别为() A. 4和5 B. 4和20 C. 4和24 D. 20和5 答案:C

解析:(P75)执行构造函数将数据成员进行赋值,aa++是后加,先赋值a=4,++bb,bb变量值先自加为6,再与a相乘,所以b=24。

18. 下列运算符中,在C++语言中不能重载的是() A. * B. >= C. :: D. /

答案:C

解析:(P186)除了类属关系运算符\、成员指针运算符\、作用域运算符\、sizeof运算符和三目运算符\以外,C++中的所有运算符都可以重载。 19. C++语言建立类族是通过() A. 类的嵌套 B. 类的继承 C. 虚函数 D. 抽象类 答案:B

解析:(P174)类族即同一个类派生出来的类,各个类是兄弟或父子关系。 20. 在C++语言中,数据封装要解决的问题是() A. 数据的规范化 B. 便于数据转换 C. 避免数据丢失

D. 防止不同模块之间数据的非法访问 答案:D

解析:(P39)封装是指把对象属性和操作结合在一起,构成独立的单元,它的内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。类是数据封装的工具,对象是封装的实现。类的访问控制机制体现在类的成员中可以有公有成员、私有成员和保护成员。对于外界而言,只需要知道对象所表现的外部行为,而不必了解内部实现细节。封装体现了面向对象方法的“信息隐蔽和局部化原则”。 二、填空题

1. 若要使用string类,需要引入的头文件是___。 答案:(P40)string.h

[解析]编译时要将头文件引入才能使用标准库中的方法或成员。 2. 在函数前面用___保留字修饰时,则表示该函数表为内联函数。 答案:(P59)inline

[解析]内联函数,用来提高程序运行速度。在类内部定义的函数也是内联函数。 3. 向量操作方法中___方法返回向量中的第一个对象。 答案:(P151)front

[解析]考察向量方法的使用。front():返回向量中的第1个对象。back():返回向量中的最后一个对象。operator[](size_type,n):返回向量中的第n+1个对象(下标为n的向量元素)。

4. C++派生类使用两种基本的面向对象技术:第一种称为性质约束,即对基类的性质加以限制;第二种称为___,即增加派生类的性质。 答案:(P129)性质扩展

[解析]派生类通过继承可以从基类中获得成员,也可以自定义成员。 5. 重载的运算符保持其原有的___、优先级和结合性不变。 答案:(P183)操作数

[解析]运算符重载时要遵循以下规则:

(1)除了类属关系运算符“.”、成员指针运算符“.*”、作用域运算符“::”、sizeof运算符和三目运算符“?:”以外,C++中的所有运算符都可以重载。

(2)重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。

(3)重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。

6. 编译时的多态性通过___函数实现。

答案:(P165)重载

[解析]编译多态性,实现的方法主要通过函数的重载或运算符的重载。 7. 预处理语句有三种,分别是宏定义、文件包含和___。 答案:(P7)条件编译

[解析]宏定义#define,文件包含#include和条件编译#if等。 8. 构造函数、析构函数和友元函数中,不是该类成员的是___。 答案:(P109)友元函数

[解析]友元函数不是类成员,但可以访问类中成员。

9. 控制格式输入输出的操作中,函数___是设置域宽的。要求给出函数名和参数类型)。 答案:(P193)setw(int)

[解析]setw(int n):用来设置n输出宽度。

10. 派生类的成员一般分为两部分,一部分是___,另一部分是自己定义的新成员。 答案:(P127)从基类继承的成员

[解析]派生类成员一个来自继承基类成员,一个来自本身增加的成员。 11. C++中ostream的直接基类___。 答案:(P193)ios

[解析]istream和ostream的直接基类是ios。

12. vector的___方法返回向量中的最后一个对象。 答案:(P151)back

[解析]front():返回向量中的第1个对象。back():返回向量中的最后一个对象。 operator[](size_type,n):返回向量中的第n+1个对象(下标为n的向量元素)。 13. 执行下列代码 int i=230;

cout <<\程序的输出结果为___。 答案:(P193)i=e6

[解析]流类库中使用格式符,输出十六进制数据。 14. 在C++中有两种参数传递方式即值传递和___传递。 答案:(P51)引用

[解析]函数参数传递有传值和传引用两种。

15. 使用new为int数组动态分配10个存储空间是___。 答案:(P10)new int[10]; [解析]new delete动态开辟空间和删除空间。new int[10],注意不要写成new int(10),使用小括号只能开辟一个空间,使用10来初始化该值。

16. 面向对象的四个基本特性是多态性、继承性、和封装性___。 答案:(P37)抽象 [解析]考察面向对象的四个特征。程序由一组抽象的对象组成,一组对象的共同特征抽象出类的概念,类是对象的抽象,对象是类的实例。封装即将数据和操作紧密结合提供访问的接口,外部通过接口实现访问数据,提供安全性。继承继承解决了类的扩展性。多态性不同对象调用相同的函数名,但调用不同的函数,实现不同的功能,解决了接口统一的问题。 17. 定义虚函数所用的关键字是___。 答案:(P170)virtual

[解析]在成员函数前加virtual修饰的函数就是虚函数。但不是所有成员函数都可以定义为虚函数的。比如构造函数,不能定义虚函数。 18. 执行下列代码

cout<<“oct:”<

答案:(P193)Oct:42

[解析]oct表示八进制,hex表示十六进制,但它们只能输出整型的数据。

19. 在C++中要创建一个文件输入流对象fin,同时该对象打开文件“Test.txt”用于输入,则正确的声明语句是___。

答案:(P200)ifstream fin(“Test.txt”); [解析]文件操作中ifstream用于文件的输入,可以调用它的构造函数与要打开的文件进行关联

20. 如果一个派生类只有一个唯一的基类,则这样的继承关系称为___。 答案:(P130)单一 [解析]根据派生类所拥有的基类数目不同,可以分为单继承和多继承。一个类只有一个直接基类时,称为单继承;而一个类同时有多个直接基类时,则称为多继承。基类与派生类之间的关系如下:

(1)基类是对派生类的抽象,派生类是对基类的具体化,是基类定义的延续。 (2)派生类是基类的组合。多继承可以看作是多个单继承的简单组合。 (3)公有派生类的对象可以作为基类的对象处理。

C++程序设计模拟试卷(五)

一、单项选择题

1. 静态成员函数没有() A. 返回值 B. this指针 C. 指针参数 D. 返回类型 答案:B

解析:(P107)静态成员函数是普通的函数前加入static,它具有函数的所有的特征:返回类型、形参,所以使用(P107)静态成员函数,指针可以作为形参,也具有返回值。静态成员是类具有的属性,不是对象的特征,而this表示的是隐藏的对象的指针,因此静态成员函数没有this 指针。静态成员函数当在类外定义时,要注意不能使用static关键字作为前缀。由于静态成员函数在类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接

访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。

2. 在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是() A. 友元函数 B. 虚函数 C. 构造函数 D. 析构函数 答案:C

解析:(P75)定义构造函数作用就是初始化对象,而析构函数释放对象空间。虚函数用于完成多态性,友元增加访问方便性。

3. 所有在函数中定义的变量,都是() A. 全局变量 B. 局部变量 C. 静态变量 D. 寄存器变量 答案:B

解析:(P136)变量存储类可分为两类:全局变量和局部变量。

(1)全局变量:在函数外部定义的变量称为全局变量,其作用域为:从定义变量的位置开始到源程序结束。全局变量增加了函数之间数据联系的渠道,全局变量作用域内的函数,均可使用、修改该全局变量的值,但是使用全局变量降低了程序的可理解性,软件工程学提倡尽量避免使用全局变量。

(2)局部变量:在函数内部定义的变量称为局部变量,其作用域为:从定义变量的位置开始到函数结束。局部变量包含自动变量(auto)静态变量(static)以及函数参数。auto变量意味着变量的存储空间的分配与释放是自动进行的。说明符auto可以省略。函数中的局部变量存放在栈空间。在函数开始运行时,局部变量被分配内存单元,函数结束时,局部变量释放内存单元。因此,任两个函数中的局部变量可以同名,因其占有不同的内存单元而不影响使用。这有利于实现软件开发的模块化。static变量是定义在函数体内的变量,存放在静态存储区,不用栈空间存储,其值并不随存储空间的释放而消失。

4. 假定AB为一个类,则执行“AB a(2), b[3],*p[4];”语句时调用该类构造函数的次数 为() A. 3 B. 4 C. 5 D. 9 答案:B

解析:(P79)a(2)调用1次带参数的构造函数,b[3]调用3次无参数的构造函数,指针没有给它分配空间,没有调用构造函数。所以共调用构造函数的次数为4。

5. 如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为() A. a.operator++(1) B. operator++(a) C. operator++(a,1) D. a.operator++() 答案:D

解析:(P186)运算符的重载,前缀先让变量变化。调用++a,等价为a.operator++(),注意无参的形式。后缀的话a++,等价于a.operator(0),带形参,形参名可省。 6. 已知f1和f2是同一类的两个成员函数,但f1不能直接调用f2,这说明() A. f1和f2都是静态函数

B. f1不是静态函数,f2是静态函数 C. f1是静态函数,f2不是静态函数 D. f1和f2都不是静态函数 答案:C

解析:(P107)普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,这与普通函数与常成员函数相同。因此选择C项。

7. 一个函数功能不太复杂,但要求被频繁调用,则应把它定义为 () A. 内联函数 B. 重载函数 C. 递归函数 D. 嵌套函数 答案:A

解析:(P59)内联函数特征代码少,频繁调用,执行效率高。重载函数解决统一接口的问题;递归是子程序调用,程序调用要耗费很多空间和时间,循环/迭代都比递归有效率得多,递归只是从形式上,逻辑比较简洁。嵌套函数即反复调用,速度较慢。所以选择A项。 8. 解决定义二义性问题的方法有()