资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C+,期末复习题,B,CBAB,BCAD,A,ACACC,CABBB,DB,C,AA,CAC,C,CC,DDDCAA,1,一、选择题,1,关于构造函数的叙述正确的是,(),。,A,构造函数可以有返回值,B,构造函数的名字必须与类名完全相同,C,构造函数必须带有参数,D,构造函数必须定义,不能默认,2,关于析构函数特征描述正确的是,(),。,A,一个类中可以有多个析构函数,B,析构函数名与类名完全相同,C,析构函数不能指定返回类型,D,析构函数可以有一个或多个参数,3,构造函数是在,(),时被执行的。,A,程序编译,B,创建对象,C,创建类,D,程序装入内存,4,定义,A,是一个类,那么执行语句“,A a,b(3),*p;”,调用了,(),次构造函数。,A,2 B,3 C,4 D,5,5,在下列函数原型中,可以作为类,Base,析构函数的是,(),。,A,void,Base B,Base()C,Base()const D,Base(),2,6,this,指针是,C+,实现,(),的一种机制。,A,抽象,B,封装,C,继承,D,重载,7,已知类中的一个成员函数说明为:,void Set(X&a),其中,,X&a,的含义是,(),。,A,指向类,X,的指针为,a B,将,a,的地址赋给变量,C,a,是类,X,的对象引用,用来作为,Set(,),的形参,D,变量,X,与,a,按位与作为函数,Set(,),的形参,8,下面关于友元函数的描述中,正确的说法是,(),。,A,友元函数是独立于当前类的外部函数,B,一个友元函数不能同时定义为两个类的友元函数,C,友元函数必须在类的外部定义,D,在外部定义友元函数时,必须加关键字,friend,9,一个类的友元函数能够访问该类的,(),。,A,私有成员,B,保护成员,C,公有成员,D,所有成员,10,友元的作用之一是,(),。,A,提高程序的运行效率,B,加强类的封装性,C,实现数据的隐藏性,D,增强成员函数的种类,3,11,函数重载的意义主要在于,(),。,A,使用方便,提高可读性,B,提高执行效率,C,减少存储空间开销,D,提高程序可靠性,12,下面关于重载函数的说法中正确的是,(),。,A,重载函数一定具有不同的返回值类型,B,重载函数形参个数一定不同,C,重载函数一定有不同的形参列表,D,重载函数名可以不同,13,一个函数功能不太复杂,但要求被频繁调用,选用,(),。,A,内联函数,B,重载函数,C,递归函数,D,嵌套函数,14,将函数声明为内联函数的关键字是,(),。,A,Register B,static C,inline D,extern,15,在内联函数内允许使用的是,(),。,A,循环语句,B,开关语句,C,赋值语句,D,以上都允许,4,16,在,C+,中,下列关于参数默认值的描述中正确的是,(),。,A,设置参数默认值时,应当全部设置,B,设置参数默认值后,调用函数不能再对参数赋值,C,设置参数默认值时,应当从右向左设置,D,只能在函数定义时设置参数默认值,17,下列关于静态数据成员的叙述,错误的是,(,),。,A,静态数据成员在对象调用析构函数后,从内存中撤销,B,即使没有实例化类,静态数据成员也可以通过类名进行访问,C,类的静态数据成员是该类所有对象所共享,D,类的静态数据成员需要初始化,18,下列关于静态成员的叙述中,错误的是,(,),。,A,类的外部可以直接调用类的静态数据成员和静态成员函数,B,与一般成员一样,只有通过对象才能访问类的静态成员,C,类的静态数据成员不能在构造函数中初始化,D,类的一般成员函数可以调用类的静态成员,19,声明类的成员为静态成员,必须在其前面加上关键字,(,),。,A,const B,static C,public D,virtual,20,静态成员为该类的所有,(,),共享。,A,成员,B,对象,C,this,指针,D,友元,5,21,重载赋值操作符时,应声明为,(,),。,A,静态成员函数,B,友元函数,C,普通函数,D,成员函数,22,为了满足运算符,+,的可交换性,必须将其重载为,(,),。,A,静态成员函数,B,友元函数,C,普通函数,D,成员函数,23,下列运算符中,,(,),运算符不能使用友元函数重载。,A,B,+C,=D,+,24,在类的继承与派生过程中,关于派生类不正确的说法是,(),。,A,派生类可以继承基类的所有特性,B,派生类只能继承基类的部分特性,C,派生类可以重新定义已有的成员,D,派生类可以改变现有成员的属性,25,派生类对象对它的基类成员,,(),是可以访问的。,A,公有继承的公有成员,B,公有继承的私有成员,C,公有继承的保护成员,D,私有继承的共有成员,6,26,下列叙述中不正确的是,(),。,A,含纯虚函数的类称为抽象类,B,不能直接由抽象类建立对象,C,抽象类不能作为派生类的基类,D,纯虚函数没有其函数的实现部分,27,当定义派生类的对象时,调用构造函数的正确顺序是,(),。,A,先调用基类的构造函数,再调用派生类的构造函数,B,先调用派生类的构造函数,再调用基类的构造函数,C,调用基类的构造函数和派生类的构造函数的顺序无法确定,D,调用基类的构造函数和派生类的构造函数是同时进行的,28,关于多重继承二义性的描述中,,(),是错误的。,A,一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性,B,解决二义性最常用的方法是对成员名的限定,C,基类和派生类中出现同名函数,也存在二义性,D,一个派生类是从两个基类派生而来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性,29,下列关于虚函数的说法,正确的是,(),。,A,虚函数是一个,static,类型的成员函数,B,虚函数是一个非成员函数,C,基类中采用,virtual,声明一个虚函数后,派生类中定义相同原型的函数时可以不加,virtual,声明,D,派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型,7,30,关于虚函数和抽象类描述中,,(),是错误的。,A,纯虚函数是一种特殊的函数,它没有具体实现,B,抽象类是指具有纯虚函数的类,C,一个基类中声明有纯虚函数,则它的派生类一定不再是抽象类,D,抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出,31,下列程序,编译时出现错误的是,(),。,class A /1,public:/2,A(),Fun();/3,virtual void Fun()=0;/4,;,A.1 B.2 C.3 D.4,8,32,一个,(,),允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。,A,函数模板,B,模板函数,C,类模板,D,模板类,33,如果一个模板声明列出了多个参数,则每个参数之间必须使用逗号隔开,每个参数都须重复使用关键字,(),。,A,const B,static C,void D,class,34,假设类模板,Employee,存在一个,static,数据成员,salary,,由该类模板实例化,3,个模板类,那么存在,(),个,static,数据成员的副本。,A,0 B,1 C,2 D,3,35.C+,中,数据文件类型分为,(),。,A,文本文件和顺序文件,B,顺序文件和随机文件,C,文本文件和二进制文件,D,数据文件和文本文件,36,(),是标准输入流。,A,cin B,coutC,cerrD,clog,37,关于提取和插入运算符,下列说法不正确的是,(),。,A,可以重载为类的成员函数,B,应该重载为类的友元函数,C,提取运算符是从输入字符序列中提取数据,D,插入运算符是把输出数据插入到输出字符序列中,9,二、填空题,1,在,C+,中,函数的参数有三种传递方式,它们是值传递、和 。,2,当一个成员函数被调用时,该成员函数的 指向调用它的对象。,3,在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有 ,对此数据成员的访问将出现歧义。,4,拷贝构造函数使用 作为参数初始化创建中的对象。,5,在公有继承的情况下,基类数据成员在派生类中的访问权限 。,地址或指针传递 引用传递,this,指针,作用域分隔符限定时,引用,保持不变,10,6,描述命题,“,A,小于,B,或小于,C,”,的表达式为,。,7,用,new,申请某一个类的动态对象数组时,在该类中必须能够匹配到 构造函数,否则应用程序会产生一个编译错误。,8,静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象 。,9,为了避免可能出现的歧义,,C+,对,if,else,语句配对规则规定为:,else,总是与 配对。,10,设,“int a=3,b=4,c=5;”,,表达式,“,(,a+b,),c&b=c”,的值是 。,AB|AC,没有形参的或缺省参数,共享,与最近的,if,0,11,11,面向对象的程序设计有三大特征,它们是,。,12,在,Visual C+,中,定义重载函数时,应至少使重载函数的参数个数或参数类型 ;在基类和派生类中,成员函数的覆盖是指,。,13,构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个,、,。,14,动态联编要满足两个条件,它们是,。,15,在,C+,类中,有一种不能定义对象的类,这样的类只能被继承,称之为 ,定义该类至少具有一个 。,封装、继承、多态,不同,派生类成员函数与在基类被覆盖的成员函数名、参数个数、参数类型和返回值类型均相同,析构函数没有参数、析构函数可以定义,为虚函数,被调用的成员函数是虚函数、用指针或引用调用虚函数,抽象类,纯虚函数,12,16,在,C+,类中,,const,关键字可以修饰对象和成员函数,,const,对象不能 ,,const,成员函数不能 。,17,举出,C+,中两种用户自定义的数据类型:。,18,C+,中没有字符串类型,字符串是通过 来表示的,每一个字符串都有一个结尾字符 。,19,C+,中没有输入输出语句,输入输出是通过 实现的,写出一条打印整型变量,n,的输出语句:,;,20,举出,C+,中两种代码复用的方式:。,被修改,修改类数据成员,类、枚举,字符数组,0,输入输出库,coutn,继承、复用,13,21,下面程序的运行结果是。,#include,void main(),int i=1;,while(i=15),i+;,if(i%3!=2)continue;,else cout i=iendl;,2 5 8 11 14,14,22,下面程序的运行结果是,_,。,#include,class test,private:,int num;,float fl;,public:,test();,int getint()return num;,float getfloat()return fl;,test();,;,test:test(),cout Initalizing default endl;,num=0;fl=0.0;,test:test(),cout Desdtructor is active endl;,void main(),test array2;,cout array1.getint()array1.getfloat()endl;,Initalizing defaultInitalizing default0 0Desdtructor is activeDesdtructor is active,15,23,下面程序的运行结果是,_,。,#include,class A,public:,A()coutA:A()called.n;,virtual A()coutA:A()called.n;,;,class B:public A,public:,B(int i),coutB:B()called.n;,buf=new chari;,virtual B(),delete buf;,coutB:B()called.n;,private:,char*buf;,;,void fun(A*a),delete a;,void main(),A*a=new B(15);,fun(a);,A:A()called.,B:B()called.,B:B()called.,A:A()called.,16,三 问答题,1,若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?,解答要点:当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错,。,17,2,简述成员函数、全局函数和友元函数的差别。,解答要点:以下几点必须说清楚:,成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局函数。如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。,不是在类中定义的成员函数都是全局函数。,如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个类中用,friend,关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。,18,3,简述结构化的程序设计、面向对象的程序设计的基本思想。,解答要点:结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。,4,结构,struct,和类,class,有什么异同?,解答要点:,struct,和,class,都可以定义类,但是缺省访问权限说明时,,struct,的成员是公有的,而,class,的成员是私有的。在,C+,中,,struct,可被,class,代替。,19,四、找出下面程序(或程序段)中的语法错误,(,1,)程序功能是倒序输出各给定的字符串。,#include,void main(),char str5=First,Second,Third,Forth,Fifth;,char*cp=str4,str3,str2,str1,str0;,int i;,while(i=5),printf(%c,*(cp+i);,i+;,char str5=First,Second,Third,Forth,Fifth;,应为,char str510=First,Second,Third,Forth,Fifth;,while(i=5),应为,while(i5),printf(%c,*(cp+i);,应为,printf(%s,*(cp+i);,int i;,应为,int i=0;,20,(,2,)程序功能是将各个平方根值放入数组中。,#include,void main(),int max,a,i;,scanf(%d%d,max,a);,double xmax;,for(i=0;imax;i+),xi=sqrt(a*i);,增加,#include,scanf(%d%d,max,a);,应为,scanf(%d%d,double xmax;,改为:,double*x=new doublemax;,delete x;,21,五、(,8,分)下列,shape,类是一个表示形状的抽象类,,area(),为求图形面积的函数,,total(),则是一个通用的用以求不同形状的图形面积总和的函数。请从,shape,类派生三角形类,(triangle),、矩形类(,rectangle,),并给出具体的求面积函数,class shape,public:,virtual float area()=0;,;,float total(shape*s,int n),float sum=0.0;,for(int i=0;iarea();,return sum;,22,class Triangle:public Shape,public:,Triangle(double h,double w)H=h;W=w;,double area()constreturn H*W*0.5;,private:,double H,W;,;,class Rectangle:public Shape,public:,Rectangle(double h,double w)H=h;W=w;,double area()constreturn H*W;,private:,double H,W;,;,23,
展开阅读全文