您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > c++面向对象程序设计语言重点难点复习题及答案
1、数据共享与保护一、选择题:1、在下面存储类中,(C)对象的可见性与生存期不一致。A.外部类B.自动类C.内部静态类D.寄存器类2、在下面存储类中,(A)的对象不是局部变量。A.外部静态类B.自动类C.函数形参D.寄存器类3、关于局部变量,下面说法正确的是(C)。A.定义该变量的程序文件中的函数都可以访问B.定义该变量的函数中的定义处以下的任何语句都可以访问C.定义该变量的复合语句中的定义处以下的任何语句都可以访问D.定义该变量的函数中的定义处以上的任何语句都可以访问4、一个类的静态数据成员所表示属性(C)。A.是类的或对象的属性B.只是对象的属性C.只是类的属性D.类和友元的属性5、类的静态成员的访问控制(D)。A.只允许被定义为privateB.只允许被定义为private或protectedC.只允许被定义为publicD.可允许被定义为private、protected或public6、静态成员函数对类的数据成员访问(B)。A.是不允许的B.只允许是静态数据成员C.只允许是非静态数据成员D.可允许是静态数据成员或非静态数据成员7、被非静态成员函数访问的类的数据成员(A)。A.可以是非静态数据成员或静态数据成员B.不可能是类的静态数据成员C.只能是类的非静态数据成员D.只能是类的静态数据成员8、静态数据成员的初始化是在(D)中进行的。A.构造函数B.任何成员函数C.所属类D.全局区9、当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的(D)。A.只能是公有成员B.只能是保护成员C.只能是除私有成员之外的任何成员D.具有任何权限的成员10、引入友元的主要目的是为了(C)。A.增强数据安全性B.提高程序的可靠性C.提高程序的效率和灵活性D.保证类的封装性11、一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明(A)。A.需加上类域的限定B.不需加上类域的限定C.类域的限定可加可不加D.不需要任何限定二、判断题1、类的静态数据成员需要在定义每个类的对象时进行初始化。F2、当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A的所有成员。T3、静态数据成员必须在类外定义和初始化。T4、静态成员函数可以引用属于该类的任何函数成员F。5、友元函数是在类声明中由关键字friend修饰说明的类的成员函数。F6、友元函数访问对象中的成员可以不通过对象名F三、填空题:1、若“doublex=100;”是文件F1.CPP中的一个全局变量定义语句,若文件F2.CPP中的某个函数需要访问此x,则应在文件F2.CPP中添加对x的声明语句为Externdoublex;2、如果一个函数定义中使用了static修饰,则该函数不允许被其它文件中的函数调用。3、定义外部变量时,不用存储类说明符Extern,而声明外部变量时用它。4、调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的头文件。5、C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和代码区。6、局部变量具有局部生存期,存放在内存的栈区中。7、对类中对象成员的初始化是通过在构造函数中给出的初始化表来实现的。8、对类中常量成员的初始化是通过在构造函数中给出的初始化表来实现的。9、对类中引用成员的初始化只能通过在构造函数中给出的初始化表来实现。10、对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通过构造函数中的函数体来实现。11、假定要把aa定义为AB类中的一个常量整数型数据成员,则定义语句constintaa。12、假定要把aa定义为AB类中的一个引用整数型数据成员,则定义语句为int&aa。13、假定AB类中只包含一个整型数据成员a,并且它是一个常量成员,若利用参数aa对其进行初始化,则该类的构造函数的定义为AB(intaa){a=aa;}。14、假定AB类中只包含一个整型数据成员a,并且它是一个引用成员,若利用引用参数aa对其进行初始化,则该类的构造函数的定义为AB(int&aa){a=aa;}。15、静态成员函数能够直接访问类的静态数据成员,只能通过对象名访问类的非静态数据成员。16、静态数据成员必须在所有函数的定义体外进行初始化。17、一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上类域的限定。四、修改程序题:下列程序段中,A_class的成员函数Variance()可求出两数的平方差,请改写该程序段,把Variance()函数从A_class类中分离出来,用友元函数来实现该函数的功能。classA_class{private:intx,y,t;public:A_class(inti,intj):x(i),y(j){if(yx){t=x;x=y;y=t;}}intVariance(){returnx*x-y*y;}//其它函数从略};voidmain(){A_classA_obj(3,5);coutResult:A_obj.Variance()endl;}修改后的源程序:classA_class{private:intx,y,t;public:A_class(inti,intj):x(i),y(j){if(yx){t=x;x=y;y=t;}}friendintVariance();//其它函数从略};intvariance(){returnx*x-y*y;}voidmain(){A_classA_obj(3,5);coutResult:A_obj.Variance()endl;2、数组、指针与字符串一、1、在下面的一维数组定义中,哪一个有语法错误。(C)A.inta[]={1,2,3};B.inta[10]={0};C.inta[];D.inta[5];2、在下面的字符数组定义中,哪一个有语法错误。(D)。A.chara[20]=”abcdefg”;B.chara[]=”x+y=55.”;C.chara[15];D.chara[10]=’5’;3、在下面的二维数组定义中,正确的是(C)。A.inta[5][];B.inta[][5];C.inta[][3]={{1,3,5},{2}};D.inta[](10);4、假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为(C)。A.2B.4C.6D.85、假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。A.0B.4C.8D.66、若定义了函数double*function(),则函数function的返回值为(B)。A.实数型B.实数的地址C.指向函数的指针D.函数的地址7、以下函数的返回结果是(A)。intfunction(char*x){char*p=x;while(*p++);return(p-x-1);}A.求字符串的长度B.将字符串x连接到字符串p后面C.将字符串x复制到字符串p中D.将字符串x反向存放8、设有如下函数定义intf(char*s){char*p=s;while(*p!=’\0’)p++;return(p-s);}在主函数中用coutf(“good”)调用上述函数,则输出结果为(B)。A.3B.4C.5D.69、假定变量m定义为“intm=7;”,则定义变量p的正确语句为(B)。A.intp=&m;B.int*p=&m;C.int&p=*m;D.int*p=m;10、变量s的定义为“char*s=”Helloworld!”;”,要使变量p指向s所指向的同一个字符串,则应选取(A)。A.char*p=s;B.char*p=&s;C.char*p;p=*s;D.char*p;p=&s11、关于void指针,下列说法正确的是(C)。A.void指针就是未指向任何数据的指针B.void指针就是已定义而未初始化的指针C.指向任何类型数据的指针可直接赋值给一个void指针D.void指针值可直接赋给一个非void指针12、假定一条定义语句为“inta[10],x,*pa=a;”,若要把数组a中下标为3的元素值赋给x,则不正确的语句为(D)。A.x=pa[3];B.x=*(a+3);C.x=a[3];D.x=*pa+3;13、假定有定义“intb[10];int*pb;”,则不正确的赋值语句为(D)。A.pb=b;B.pb=&b[0];C.*pb=newint;D.pb=b[5];14、假定p是具有double类型的指针变量,则表达式++p使p的值(以字节为单位)增加(C)。A.1B.4C.sizeof(double)D.sizeof(p)15、假定p指向的字符串为”string”,则coutp+3的输出结果为(C)。A.stringB.ringC.ingD.i16、假定p指向的字符串为”string”,若要输出这个字符串的地址值,则使用(D)。A.cout*s;B.couts;C.cout&s;D.cout(void*)s;17、定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为(A)。A.int*p=newint[30];B.int*p=newint(30);C.int*p=new[30];D.*p=newint[30];18、假定p是具有int**类型的指针变量,则给p赋值的正确语句为(B)。A.p=newint;B.p=newint*;C.p=newint**;D.p=newint[10];19、要使语句“p=newint[10][20];”能够正常执行,p应被事先定义为(D)。A.int*p;B.int**p;C.int*p[20];D.int(*p)[20];20、假定变量a和pa定义为“doublea[10],*pa=a;”,要将12.35赋值给a中的下标为5的元素,不正确的语句是(D)。A.pa[5]=12.35;B.a[5]=12.35;C.*(pa+5)=12.35;D.*(a[0]+5)=12.35;21、假定变量b和pb定义为“intb[10],*pb=b;”,要将24赋值给b[1]元素中,不正确的语句是(C)。A.*(pb+1)=24;B.*(b+1)=24;C.*++b=24;D.*++pb=24;22、假定指针变量p定义为“int*p=newint(100);”,要释放p所指向的动态内存,应使用语句(A)。A.deletep;B.delete*p;C.delete&p;D.delete[]p;23、假定指针变量p定义为“int*p=newint[30];”,要释放p所指向的动态内存,应使用语句(D)。A.deletep;B.delete*p;C.delete&p;D.delete[]p;24、当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为(C)。A.nB.n+1C.n-1D.n-225、在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结点的地址赋给(D)。A.elemHeadB.elemTailC.elemHead-next和elemHeadD.elemTail-next和elemTail26、在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队为空,则进行插入时必须把新结点的地址赋给(C)。A.elemHeadB.elemTailC.elemHead和elemTailD.elemHead或elemTail27、当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储(A)个整数。A.nB.n+1C.
本文标题:c++面向对象程序设计语言重点难点复习题及答案
链接地址:https://www.777doc.com/doc-3937179 .html