C. 对象是类的一个变量
D. 对象之间的信息传递是通过消息进行的 答案:A
解析: A对象在C++中才有,包括数据和操作两项,而C中的变量只有数据,没有操作。所 以A项错误。
18. 派生类的构造函数的成员初始化列表中,不能包含() A. 基类的构造函数 B. 基类的对象初始化 C. 派生类对象的初始化
D. 派生类中一般数据成员的初始化 答案:C
解析:派生类的构造函数的成员初始化,包括基类成员、基类对象成员和派生类成员。因
为本身就是初始化定义的对象,在构造函数中再进行该类对象的初始化产生了循环定义,或者类 中不能包括本身类的成员对象。所以选择C项。 19. 关于new运算符的下列描述中,错误的是() A. 它可以用来动态创建对象和对象数组
B. 使用它创建的对象或对象数组可以使用运算符delete删除 C. 使用它创建对象时要调用构造函数
D. 使用它创建对象数组时必须指定初始值 答案:D
解析: new创建的对象数组不能指定初始值,所以调用无参的构造函数,选择D项。
20. 假定一个类的构造函数为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
解析:执行构造函数将数据成员进行赋值,aa++是后加,先赋值a=4,++bb,bb变量值先自 加为6,再与a相乘,所以b=24。
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答 案。错填、不填均无分。
1. 在C++中,编译指令都是以___(符号)开始。 答案:#
C++的源程序可包括各种编译指令,以指示编译器对源代码进行编译之前先对其进行预处理。所 有的编译指令都以#开始,每条指令单独占用一行,同一行不能有其他编译指令和C++语句(注释 例外)
2. 在函数前面用___保留字修饰时,则表示该函数表为内联函数。 答案: inline
[解析]内联函数,用来提高程序运行速度。在类内部定义的函数也是内联函数。 3. 执行下列程序 int a=21,j=16;
cout.setf(ios::hex); cout< cout.unsetf(ios::hex); cout< 程序的输出结果是___。 答案: 1516 [解析]a=21以十六进制输出,j=16以十进制输出。 4. 在单继承和多继承方式中,面向对象的程序设计应尽量使用___继承。 答案:单 [解析]多继承是单继承的扩展,且多继承易产生二义性等问题。 5. 函数模板中紧随template之后尖括号内的类型参数都要冠以保留字___。 答案: class [解析]类模板的使用。template 6. 在C++中,访问指针所指向的对象的成员使用___运算符。 答案:->或. [解析]使用指针访问成员有两种方法:成员运算符“.”或指向运算符“.”。 7. 定义类的动态对象数组时,系统只能够自动调用该类的___构造函数对其进行初始化。 答案:无参 [解析]使用new创建对象数组,调用无参构造函数。 8. 局部对象和全局对象中,在同一程序中___生存期最长。 答案:全局对象 变量或对象的生命期或者作用域的不同,全局对象生命期长。 9. this指针始终指向调用成员函数的___。 答案:对象 this指针是隐藏的指针,它指向调用函数的对象。 10. 派生类的主要用途是可以定义其基类中___。 答案:不具有的成员 [解析]继承的特点,扩充基类,即在派生类中增加基类不具有的成员。 11. 在用class定义一个类时,数据成员和成员函数的默认访问权限是___。 答案: private [解析]定义类时的成员默认为私有,而结构体则是公有。 12. 使用new为int数组动态分配10个存储空间是___。 答案: new int[10]; [解析]new delete动态开辟空间和删除空间。new int[10],注意不要写成new int(10),使用小括号只能开辟一个空间,使用10来初始化该值。 13. 类模板用来表达具有___的模板类对象集。 答案:相同处理方法 [解析]模板特点是不同的数据具有相同的处理方法的抽象。 14. 如果通过同一个基类派生一系列的类,则将这些类总称为___。 答案:类族 [解析]单继承方式派生的众多的类。 15. 面向对象的四个基本特性是多态性、继承性、和封装性___。 答案:抽象 [解析]考察面向对象的四个特征。程序由一组抽象的对象组成,一组对象的共同特征抽象出类 的概念,类是对象的抽象,对象是类的实例。封装即将数据和操作紧密结合提供访问的接口,外 部通过接口实现访问数据,提供安全性。继承继承解决了类的扩展性。多态性不同对象调用相同 的函数名,但调用不同的函数,实现不同的功能,解决了接口统一的问题。 16. 所有模板都是以___关键字和一个形参表开头的。 答案: template [解析]类模板,函数模板都要使用template这一关键字。 17. 在C++语言中,访问一个对象的成员所用的成员运算符是___。 答案:. [解析]成员运算符“.”,如果是指针可以使用“->”。 18. 开发一个C++语言程序的步骤通常包括编辑、___、连接、运行和调试。 答案:编译 [解析]vc开发过程,要经过编辑、编译、连接和运行四个步骤,与其它高级语言相同。 19. 执行下列代码 string str(\cout< [解析]substr取子字符串,第1个参数表示要截取子串在字符串中的位置,第2个表示取多少个 字符。 20. 定义___函数时,应在参数个数或参数类型上有所不同。 答案:重载 [解析]重载函数要求同名函数具有相同的功能,而只能是函数类型、参数个数或参数顺序不同 。系统将根据同名函数的这些不同之处来选择其对应的实现。 三、改错题(本大题共5小题,每小题4分,共20分) 1. #include A(const char *na){strcpy(name,na);} private: char name[80]; }; class B:public A { public: B(const char *nm):A(nm){} void show(); }; void B::show() { cout<<\} void main() { B b1(\b1.show(); } 答案:private:因为name如果是私有的,在派生类中无法访问,而基类没有提供成员函数来访问