值的等价形式:
*(*(p+i)+j) *(p[i]+j) p[i][j]都表示b数组第i+1、第j+1列元素的值。 所以题目分别访问p[0][0],p[0][1],p[0][2]。 18. 在C++中,使用流进行输入输出,其中用于屏幕输入() A. cin B. cerr C. cout D. clog
答案:A
解析:(1)标准输入流cin:istream类的对象。(2)标准输出流cout:ostream类的对象。 (3)非缓冲型标准出错流cerr:ostream类的对象。(4)缓冲型标准出错流clog:ostream类的对象
19. 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数
成员a()的格式为() A. x.a B. x.a() C. x->a
D. (*x).a() 答案:B
解析:对象访问成员的方式为:对象名.成员。指针可以有两种:(*对象指针).成员或者对 象指针->成员。A选项是访问数据成员,B项是访问成员函数。 20. 关于对象概念的描述中,说法错误的是() A. 对象就是C语言中的结构变量
B. 对象代表着正在创建的系统中的一个实体 C. 对象是类的一个变量
D. 对象之间的信息传递是通过消息进行的 答案:A
解析:A对象在C++中才有,包括数据和操作两项,而C中的变量只有数据,没有操作。所
以A项错误。
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案 。错填、不填均无分。
1. C++的流库预定义了4个流,它们是cin、cout、clog和___。 答案:(P193)cerr
[解析]cin、cout、clog和cerr分别用于标准输入、输出、标准错误流(缓冲)和标准错误流
(非缓冲)。
2. 每个对象都是所属类的一个___。 答案:实例
[解析]类是对象的抽象,对象是类的一个实例。
3. 在已经定义了整型指针ip后,为了得到一个包括10个整数的数组并由ip所指向,应使用语 句___。
答案:int *ip=new int[10];
[解析]new用来动态开辟空间。常用来产生动态数组及对象构造函数。 4. 函数模板中紧随template之后尖括号内的类型参数都要冠以保留字___。 答案:class
[解析]类模板的使用。template
5. 定义类的动态对象数组时,系统只能够自动调用该类的___构造函数对其进行初始化。 答案:无参
[解析]使用new创建对象数组,调用无参构造函数。 6. 表达式cout< [解析]endl与字符常量‘\n’等价。 7. 在C++中,访问一个指针所指向的对象的成员所用的指向运算符是___。 答案:-> [解析]指针使用成员有两种方法:“->”指向运算符和“.”成员访问运算符。 8. 假如一个类的名称为MyClass,使用这个类的一个对象初始化该类的另一个对象时,可以调 用___构造函数来完成此功能。 答案:复制或拷贝 复制或拷贝构造函数就是用对象初始化新的对象。 9. 对赋值运算符进行重载时,应声明为___函数。 答案:(P183)类成员 [解析]运算符重载的方法有友元或者成员函数两种途径,但是赋值运算符只能使用成员函数的 方法来实现。 10. 如果要把A类成员函数f()且返回值为void声明为类B的友元函数,则应在类B的定义中加 入的语句___。 答案:(P109)friend void A::f(); [解析]成员函数作为另一个类的友元函数,格式为:friend 返回类型类名::函数(形参)。 11. 下列程序段的输出结果是___。 for(i=0,j=10,k=0;i<=j;i++,j-=3,k=i+j);cout< 答案:4 [解析]for循环结构,三个表达式的作用,初始化、循环判断条件和循环变量变化。循环执行了 三次,k的作用是计算i、j的和。 12. String 类的___方法返回查找到的字符串在主串的位置。 答案:(P40)find [解析]string类对象方法的find,查不到字符串,则返回-1。 13. int n=0; while(n=1)n++; while循环执行次数是___。 答案:无限次 [解析]=是赋值运算符,不是关系运算符,且不等0,所以死循环。 14. 控制格式输入输出的操作中,函数___是用来设置填充字符。要求给出函数名和参数类型 答案:setfill(char) [解析]格式控制方法的使用,如setw,setfill等等。 15. C++语言支持的两种多态性分别是编译时的多态性和___的多态性。 答案:运行时 [解析]多态性包括静态的(编译时)多态性和动态的(运行时)多态性。 16. 设函数sum是由函数模板实现的,并且sum(3,6)和sum(4.6,8)都是正确的函数调用,则函 数模板具有___个类型参数。 答案:2 17. 执行下列代码 string str(\ cout< [解析]substr取子字符串,第1个参数表示要截取子串在字符串中的位置,第2个表示取多少个 字符。 18. 在面向对象的程序设计中,将一组对象的共同特性抽象出来形成___。 答案:类 [解析]类是相似特征的对象的抽象,对象是类的一个实例。 19. 定义类动态对象数组时,元素只能靠自动调用该类的___来进行初始化。 答案:无参构造函数 [解析]使用new 创建动态对象数组,不能有参数,所以只能调用无参的构造函数,初始化对象 20. 已知有20个元素int类型向量V1,若用V1初始化为V2向量,语句是___。 答案:ector [解析]采用向量初始化另一个向量的形式:vector 三、改错题(本大题共5小题,每小题2分,共10分)下面的类定义中有一处错误,请用下 横线标出错误所在行并给出修改意见。 1. #include Test(int i,int j){x=i,y=j;} int getx(){return x;} int gety(){return y;} }; void main() {Test mt(10,20); cout< } 答案:int x,y=20;在类内部不能对数据成员直接赋值。 [修改]int x,y; 2. #include fun(int i,int j) {x=i;y=j;} show() {cout<<\if(y) cout<<\cout< void main() {Test a; a.fun(1); a.show(); a.fun(2,4); a.show(); } 答案:int i,int j调用时,既有一个参数,也有两个参数,且没有重载,所以参数需要带默认 值。所以int i,int j错误。 [修改]int i,int j=0//注j只要有一个int类型的数据就行。 3. #include virtual void fun()=0; A(int a) {i=a;} }; class B:public A {int j; public: void fun() {cout<<\\n\B(int m,int n=0):A(m),j(n){} }; void main() {A *pa; B b(7); pa=&b;