面向对象程序设计
面向对象程序设计复习题面向对象程序设计复习题 一、单项选择题一、单项选择题 1、下列对类的描述中,不符合 C++语法的是( B) 。 A.一个派生类至少有一个基类 B.一个派生类只能有一个基类 C.一个基类不可以有多个派生类 D.抽象类一定是另一个类的基类 2、 用 I/O 流打开一个文件时, 如果不指定文件存储方式, 则该文件的格式是 ( B ) 。 A.二进制文件 B.文本文件 C.无格式 D.不确定 3、基类中的保护成员在其私有派生类中的访问属性是( A) 。 A.私有 B.公有 C.保护 D.不确定 4、在面向对象程序设计中,基类和派生类用于实现的特性是( C) 。 A.封装性 B.继承性 C.多态性 D.安全性 5、下列关于对象的描述中,正确的是( B) 。 A.对象是一种数据类型 B.对象是类的实例 C.对象是对现实中同类事物的一种抽象描述 D.对象与现实中的一个物体相对应 6、下列关于类的描述中,正确的是( A) 。 A.定义一个类就定义了一种新数据类型 B.类是一种特殊的变量 C.定义了一个类就会为类的数据成员分配存储空间 D.类中不能没有成员函数 7、C++中的虚函数可以实现的面向对象的基本特性是( D) 。 A.封装性 B.继承性 C.抽象性 D.多态性 8、下列的整型常数中,符合 C++语法的八进制常数是( A) 。 A.007 B.301 C.098 D.0X12 9、下列常量中,正确的是( C) 。 A.’ok!’ B.π C.34.78f D.1.8e-7.5 10、下列数组的定义形式中,正确的是( D) 。 A.char s1[] B.char s2[3.5] C.char s3[3]={‘a’,’x’,’d’,’\0’} D.char s4[20]={“123”} 11、已知:int a[3][5]; 则 a[2]表示的是( A) 。 A.a[2][0]的地址 B.a[2][0]的值 C.第 2 行的所有元素 D.无意义 1 1 / 3636 12、 已知: int a=2; double b=2.5, 下列表达式中, 结果为整型数的是 ( D) 。 A.a%5+b B.b%5+a C.--a+b D.a/(int)b 13、C++程序中编译预处理命令的标志是( A) 。 A.# B.if C.cin D.for 14、C++中循环体至少执行一次的循环是( B) 。 A.While 循环 B.Do-while 循环 C.For 循环 D.没有 15、C++中设置友元函数的目的是( B) 。 A.解决继承中的二义性问题 B.提高编程效率 C.实现动态多态性 D.实现静态多态性 16、在类的友元函数中,可以访问的数据成员是( D) 。 A.本类的私有成员 B.本类的保护成员 C.本类的公有成员 D.本类的所有成员 17、下列描述中,不属于虚函数的特征是( C) 。 A.函数定义时不加 virtual B.是类的非静态成员函数 C.函数没有形参 D.不能重载 18、下列各种函数中,在对象生命期结束时自动调用的函数是( B) 。 A.构造函数 B.析构函数 C.友元函数 D.虚函数 19、下列描述中,不属于地址调用的是( D) 。 A.形参、实参是指针 B.形参、实参都是数组 C.形参是指针,实参是数组名 D.形参是变量的引用,实参是变量 20、下列标示符中,符合 C++标示符命名规则的是( A) 。 A.Amax B.x( (2) C.int D.姓名 21、面向对象程序设计中,在已有类的基础上形成新类的机制被称为( C) 。 A.封装 B. 多态 C. 继承 D. 抽象 22、下列描述中,符合地址调用的是( A) 。 A.形参是指针,实参是地址 B.形参、实参都是变量 C.形参、实参都是变量的引用 D.形参是变量的引用,实参是变量名 23、在类的非静态成员函数中,不可以直接访问的数据成员是( D) 。 A.本类的私有成员 B.本类的保护成员 C.本类的公有成员 D.本类的所有非静态成员 24、按照标示符的命名规则,标示符中可以有( B) 。 A.运算符 B.下画线 C.汉字 D.空格 25、编译预处理命令不包括( D) 。 A.包含命令 B.宏定义命令 C.条件编译命令 D.函数原型声明 26、 如果定义一个函数时未指定函数返回值类型, 则函数返回值的类型应是 ( B ) 。 A.无 B.int C.任意 D.void 27、定义函数时直接或间接地调用了被定义函数,这样的函数称为( A) 。 2 2 / 3636 A.递归函数 B.友元函数 C.函数模版 D.内联函数 28、下列各种函数中,可用于实现动态多态性的是( D) 。 A.构造函数 B.析构函数 C.友元函数 D.虚函数 29、下列关于构造函数的描述中,错误的是( C) 。 A.构造函数的名字与类名相同 B.构造函数可以重载 C.构造函数可以被派生类继承 D.构造函数不能指定返回值的类型 30、不可以实现运算符重载的函数是( A) 。 A.析构函数 B.友元函数 C.虚函数 D.成员函数 31、 若B类是A类的派生类, 则创建B类的对象时构造函数的调用顺序是 ( A) 。 A.先调用 A 类的构造函数,然后调用 B 类的构造函数 B.先调用 B 类的构造函数,然后调用 A 类的构造函数 C.不调用 A 类的构造函数 D.视定义时 A 类和 B 类出现的位置 32、在声明类时,关键字 private、public 和 protected 可出现( D) 。 A.至少一次 B.至多一次 C.至多三次 D.任意次数 33、以下指针用法中错误的是( B) 。 A.int i; int *ptr= B.int *ptr=2000; C.int *ptr=0; D.int i, *ptr= *ptr=5; 34、抽象类中必定有的函数是( C) 。 A.构造函数 B.析构函数 C.纯虚函数 D.虚函数 35、下列描述的情况中,不执行构造函数的情况是( B) 。 A.通过 new 操作创建对象 B.用一个已有对象初始化一个新对象 C.声明一个没有初始化的新对象 D.用一个匿名对象为一个同类对象赋值 36、设有定义int a=2,b; 执行 b= (a+=2,a+5, a++);后,b 的值是( A) 。 A.4 B.5 C.7 D.9 37、以下指针用法中正确的是( A) 。 A.int a, *p= B.int a,*p=a; C.int a,*p; p