资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,*,面向对象程序设计 试卷分析,2004-9-28,2003年下半年高等教育自学考试全国统一命题考试,面向对象程序设计 试卷,试卷题型,满分100分,考试时间150分钟,一、单项选择题(10小题,20分),二、填空题(10小题,20分),三、改错题(5小题,10分),四、完成程序题(5小题,20分),五、程序分析题(6小题,30分),一、选择题1,下列特性中,,C,与,C+,共有的是,A.,继承,B.,封装,C.,多态性,D.,函数定义不能嵌套,考点:,C+,语言和,C,语言的异同,解释:,1. C+,语言是对,C,语言的扩充,其中主要增加了面向对象的支持;,2.,面向对象概念,一、选择题2,通常情况下,函数模板中的类型参数个数,不能,是,A. 0B. 2,C. 4D. 3,考点:,函数模板的概念,解释:,根据传入参数的不同类型,函数模板可以被实例化为不同的模板函数。这就要求函数模板的类型参数至少有,1,个,否则无法针对不同类型进行实例化。,一、选择题3,在下列成对的表达式中,运算符“,+”,的意义,不相同,的一对是,和,和,和,和,5.0+2,考点:,运算中涉及到的数据类型问题,解释:,运算符连接的操作数一般数据类型相同,如果不同则针对某个操作数进行隐式的类型转换,使得两者按照相同的数据类型进行运算。,一、选择题4,类的指针成员的初始化是通过函数完成的,这个函数通常是,A.,析构函数,B.,构造函数,C.,其他成员函数,D.,友元函数,考点:,类的构造函数的理解,解释:,在面向对象概念中,为了使对象的状态确定,需要在对象创建时进行正确的初始化,这一任务由构造函数来完成。,一、选择题5,要禁止修改指针,p,本身,又要禁止修改,p,所指向的数据,这样的指针应定义为,A. const char *p=“ABCD”; B.,char const *p=“ABCD”;,C.,char * const p=“ABCD”; D. const char * const p=“ABCD”;,考点:,const,修饰指针标识符的用法,解释:,1.,使用,const,保留字表示常量,即程序运行中不可以修改其值;,保留字的位置:一般放在数据类型之前,一、选择题 5续,解释:,3.,指针标识符比较特殊,用,const,修饰指针变量就涉及到两种情况:,如果需要声明指针变量本身不可修改,则,const,直接放在数据类型和星号之后,标识符之前,形如,type * const p,;,而如果需要声明指针指向的数据不可以修改,则,const,放在数据类型和星号之前,形如,const type* p,。,一、选择题6,静态成员函数没有,A.,返回值,B. this,指针,C.,指针参数,D.,返回类型,考点:类中,静态成员函数的概念,解释:,静态成员函数为类的所有对象共享,被存储在一个公用内存中。因此,静态成员函数不指向某个具体的对象,也没有,this,指针。什么是,this,指针?,一、选择题7,当一个类的某个函数被说明为,virtual,时,该函数在该类的所有派生类中,A.,都是虚函数,B.,只有被重新说明时才是虚函数,C.,只有被重新说明为,virtual,时才是虚函数,D.,都不是虚函数,考点:,虚函数的概念,解释:,虚函数是为实现某种功能而假设的函数,用关键字,virtual,修饰,常用来实现多态性和动态联编。假定在基类中定义了虚函数,而在派生类中又定义了一个同名的成员函数,它都将成为一个虚函数。,一、选择题8,下面叙述,不正确,的是,A.,派生类一般都用公有派生,B.,对基类成员的访问必须是无二义性的,C.,赋值兼容规则也适用于多重继承的组合,D.,基类的公有成员在派生类中仍然是公有的,考点:,继承和派生的概念,解释:继承是面向对象的基本概念之一,体现了类之间的一般,-,特殊关系。,继承和派生是从一个或者多个以前定义的基类继承数据和函数,同时增加或者重新定义数据和操作,。,一、选择题 8续,解释:排除法,A.,派生类一般都用公有派生,类的派生具有访问控制机制,分为公有派生和私有派生,B.,对基类成员的访问必须是无二义性的,类的继承分为单一继承和多重继承,,,多重继承访问基类时可能二义性问题,C.,赋值兼容规则也适用于多重继承的组合,赋值兼容规则指在公有派生情况下,一个派生类的对象可以作为基类的对象来使用,D.,基类的公有成员在派生类中仍然是公有的,通过私有派生,基类的公有成员在派生类中是私有的。,一、选择题9,在,C+,中实现封装是借助于,A.,枚举,B.,类,C.,数组,D.,函数,考点:,面向对象概念中对封装的理解,解释:,封装是面向对象方法的一个重要原则,它有两个含义,1.,把对象的全部属性和操作全部结合在一起,;2.,隐蔽对象的内部细节,对外形成一个边界,一、选择题10,所有在函数中定义的变量,都是,A.,全局变量,B.,局部变量,C.,静态变量,D.,寄存器变量,考点:,程序设计语言中变量的分类,解释:,按照作用域分,变量可以分为全局变量和局部变量;静态变量存放在全局数据区;寄存器变量存放在,CPU,寄存器中,加快运算速度,二、填空题11,设函数,max,是由函数模板实现的,并且,max(3.5,5),和,max(10,5),都是正确的函数调用,则该模板具有,_,个类型参数。,考点:,函数模板的应用,解释:,函数模板经过实例化得到模板函数,如果根据模板函数反推函数模板的类型参数,可以从变化的参数调用中来考虑。,1,个或者,2,个,二、填空题12,在单继承和多继承方式中,面向对象的程序设计应尽量使用,_,继承。,考点:,面向对象概念中继承的实现问题,解释:,设计中尽量采用单一继承,,原因如下,1.,单一继承比较简单,派生类只有一个基类,,多重继承可能出现二义性问题;,2.,某些面向对象的程序设计语言不支持多重继承,单,二、填空题13,语句序列,ifstream,datafile,;,datafile,.open(“data.,dat,”);,的功能可用一个语句实现,这个语句是,_,。,考点:,构造函数的使用以及文件输入流类的用法,解释:,类的构造函数可能有多个,程序中可以选择合适的构造函数来简化程序 文件输入流类,ifstream,还提供了直接使用文件名作为参数的构造函数,ifstream,(char* filename),ifstream datafile(“data.dat”);,二、填空题14,将关键字,const,写在函数头之后,函数体之前,说明该函数是一个,const,成员函数。此时,const,不是指定函数的返回值,而是修饰,_,指针。,考点:,const,修饰带有,this,指针的成员函数的情况,解释:,C+,常向非静态成员函数传递不可见的,this,指针,通过它成员函数得以存取成员数据。 仿照,const,修饰指针标识符的情况,根据,const,的位置可以判断,此处用于修饰,this,指针,this,二、填空题15,一个抽象类的派生类可以实例化的必要条件是实现了所有的,_,。,考点:,抽象类和纯虚函数的概念,解释:,抽象类,包含纯虚函数的类;纯虚函数,没有实现体的虚函数;一个抽象类只能作为基类来派生新类,不能声明抽象类的对象。,说明:答“虚函数”不确切,不理解抽象类的概念,纯虚函数,二、填空题16,在,C+,中,虚函数帮助实现了类的,_,性。,考点:,多态性的概念,解释:,多态性即多种形态,指可以根据运行情况的不同而执行不同的操作。 而虚函数一般用在类等级中,在基类中定义公共的虚函数,而在派生类中重载该虚函数。 这样当虚函数被调用时,会根据当前对象的不同类型而执行相应的代码,从而实现了类的多态性。,多态,二、填空题17,通过,C+,语言中类的,_,,可以扩充和完善已有类以适应新的需求。,考点:,面向对象中继承的概念,解释:,继承是面向对象的重要原则之一,它支持从已有对象类型出发建造新的对象类型,从而达到扩充和完善已有类型的目的,说明:继承、派生在这里通用,继承(派生),二、填空题18,为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要为该类定义,_,。,考点:,析构函数的概念,解释:,析构函数是类中一种特殊的成员函数,它对应于构造函数,在对象消失时自动执行,用于完成一些清理任务。,析构函数,二、填空题19,在联合中,所有数据成员具有,_,的地址,任一时刻只有,_,个数据成员有效。,考点:,联合的概念,解释:,联合是一种自定义类型,它虽然由若干数据成员组成,但是这些数据成员使用同一地址,因此在同一时刻只拥有一个数据成员的值。,相同,一,二、填空题20,在已经定义了整型指针,ip,后,为了得到一个包含,10,个整数的数组并由,ip,所指向,应使用语句,_,。,考点:,数组指针的应用,解释:,在,C,语言中,指针表示指向某块内存空间的地址,通过指针可以访问所指向的数据。 而数组是一个由若干同类型变量组成的集合,它在内存中占据连续的存储单元,起始地址对应于数组的第一个元素。因此可以通过指针指向数组第一个元素来引用数组中各元素。,p=new int10;,三、改错题21,下面的类定义有一处错误,请用下横线标出错误所在行并改正错误。,class A ,int,a;,public:,A(,int,aa,) : a=,aa, ,;,考点:,构造函数的实现,解释:,成员变量的初始化可以放在函数体中实现,也可以直接放在函数名和函数体之间通过初始化列表的形式实现。,三、改错题22,下面的程序先把字符串”,Look out!”,输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为,Look out!,。,程序中有一处错误,请用下横线标出错误所在行,并给出更改意见。,#include ,void main( ) ,ofstream outf(“D:tem.dat”, ios:trunc) ;,outf k ; cout k ;,cout k ;,char k20 ;,int i = 0 ; char ch ;,while( inf.get(ch) ),ki+=ch ;,ki=0 ;,三、改错题23,下面的程序有一处错误,请用下横线标出错误所在行并改正错误。,考点:,对静态成员变量的操作,解释:,静态成员不同于类的简单成员,它不指向某个具体的对象,只与类名连用。,引用方法:类名,:,成员,#include ,class Test ,public:,static int x ;,;,int x=20;,void main( ) ,cout Test:x ;,int Test:x=20;,三、改错题24,右面的程序类,B,的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。,考点:,类成员访问权限,解释:类成员的,访问权限,分别用,private,、,public,和,protected,表示私有、公有和保护,#include ,#include,class A ,public: A(const char * mn) strcpy(name, nm); ,private: char name80 ;,;,class B: public A ,public: B(const char * nm) : A(nm) ,void PrintName( ) const ;,;,void B:PrintName( ) const ,cout “name:” name endl ;,void main( ) ,B b1(“wang li”);,b1.PrintName( );,三、改错题25,用下横线标出下面程序,main,函数中的错误所在行,并说明错误原因。,#include ,class Location ,private : int X, Y;,public :,void init(int initX , int initY);,int sumXY( ) ;,;,void Location : init(int initX ,int initY) ,X=initX;,Y=initY;,int Location:sumXY( ),return X + Y;,void main( ),Location A1;,int x,y ;,A1.init(5,3) ;,x=A1.X; y=A1.Y;,coutx+y“ “A1.sumXY( );,四、完成程序题26,在下面程序横线处填写适当内容,以使该程序执行结果为:,12 88,#include ,template ,class Tany ,public:,_;,void pr( ) ,if (sizeof(int) = _ ),cout y ? x : y)endl;,else,cout y ? y : x)endl;,;,void main( ) ,Tany dobj=12.0,88.0 ;,dobj.pr( ) ;,Tany iobj=12,88 ;,iobj.pr( ) ;,T x , y ;,sizeof(T),四、完成程序题 26续,考点:类模板的应用,解释:类模板是将数据类型从类中分离出来,允许单个类处理通用的数据类型T,这样类模板与某种特定数据类型联系起来,就产生了一个真实的类。空:根据类模板中pr函数的实现和main函数中模板类对象的初始化可以确定。空:可以根据pr函数调用和执行结果来推断。,四、完成程序题27,在下面的横线处填上适当内容,使程序完整。,#include ,#include ,class loc ,private :,float x , y ;,public :,loc ( _ ),x=x1 ;,y=y1 ;,float getx( ) return x ; ,float gety( ) return y ; ,_ float dis(loc,;,float loc:dis(loc& a, loc& b),float dx=a.x-b.x ;,float dy=a.y-b.y ;,return sqrt(dx*dx+dy*dy) ;,void main( ) ,loc p1(3.5,4.5), p2(5.5,6.5);,float d=loc:dis(p1,p2);,cout“The distance is ”v2.getSpeedLevel( ),return 1;,else,return 2; ,void main( ) ,truck t ; car c ;,t.setSpeed(130); c.setSpeed(60);,coutmaxSpeedLevel(t,c)endl;,/此处结果输出为2,四、完成程序题28,在下面程序中的横线处填上适当内容,使程序完整。,virtual int,&v1,&v2,四、完成程序题 28续,考点:多态性的应用,解释:通过构建类层次来实现多态空可以根据main函数中maxSpeedLevel的函数调用、函数实现部分以及两个派生类的getSpeedLevel函数定义来推断 空、空可以根据程序输出结果和maxSpeedLevel函数体来推断,四、完成程序题29,在下面横线处填上合适内容,完成类,B,的定义。,#include ,class A ,public : A( ) a=0; ,A(int i) a=i; ,void print( ) cout a “,” ; ,private : int a ;,;,class B : public A ,public : B( ) b1=b2=0; ,B(,_ ) b1=i; b2=0; ,B(int i, int j, int k ) :,_ b1=j; b2=k; /a的值为i,void print( ) A:print( ); cout b1 “,” b2 endl;,private : int b1, b2 ;,int i ;,A( i ),四、完成程序题30,根据注释在空白处填写适当内容。,class Location ,private :,int X, Y ;,public :,void init( int initX, int initY );,int GetX( );,int GetY( );,;,void Location:init(int initX,int initY),X=initX;,Y=initY;,int Location:GetX( ) return X; ,int Location:GetY( ) return Y; ,#include,void main( ),Location A1; A1.init(20,90);,_;,/定义一个指向A1的引用rA1,_;,/用rA1在屏幕上输出对象A1的数据成员X和Y的值,Location & rA1=A1,coutrA1.GetX()rA1.GetY()endl;,五、程序分析题31,#include,class FunArray ,int *pa ; /指向数组空间,int size; /数组元素个数,public:,FunArray(int a , int thesize),:pa(a), size(thesize) ,int Size( ) return size; ,int& operator (int index), return paindex-1 ; ,;,void main( ) ,int s = 3,7,2,1,5,4 ;,FunArray ma(s, sizeof(s)/sizeof(int);,ma3=9 ;,for(int i=1 ; i=ma.Size(); i+),cout mai = (T)0 ?+ : - ) ;,cout x c (T)0 ? y : -y )“i”endl ;, ;,void main( ) ,Tclass a( 10.5 , -5.8 ) ;,a.pr( ) ;,Tclass b(10) ;,b.pr( ) ;,类模板,答案:,10.5 - 5.8 i,10 + 0 i,五、程序分析题33,#include,class Test ,private:,static int val ;,int a ;,public:,static int func( ) ;,void sfunc ( Test ,;,int Test:val=200;,int Test:func( ),return val + ;,void Test:sfunc( Test &r ),r.a = 125 ;,cout“ Result3=“r.a;,void main( ) ,cout“Result1=“Test:func(),endl;,Test a ;,cout“Result2=“a.func( ) ;,a.sfunc( a ) ;,静态成员,变量和函数,答案:,Result1=200,Result2=201 Result3=125,五、程序分析题34,#include,class A ,public:,virtual void print( ),cout“This is class A,printing.”endl ; ,;,class B : public A ,public:,void print( ) ,;,class C: public B ,public:,void print( ) cout“This is,class C printing.”endl; ,;,void show(A &a),a.print( );,void main( ) ,A a;,B b;,C c;,show(a) ;,show(b) ;,show(c) ;,多态性,答案:,This is class A printing.,This is class C printing.,五、程序分析题35,#include,class A ,public: A( ) a = 0; ,A(int i) a=i; ,void Print( ) couta“,”; ,int Geta( ) return a ; ,private: int a;,;,class B : public A ,public: B( ) b=0; ,B(int i, int j, int k);,void Print( );,private: int b;,A aa;,;,B:B(int i, int j, int k):A(i),aa(j)b=k;,void B:Print( ),A:Print( );,coutb“,”aa.Geta( )endl;,void main( ) ,B bb2;,bb0=B(1,2,5);,bb1=B(3,4,7);,for(int i=0;i2;i+),bbi.Print( );,类的继承,答案:,1 , 5 , 2,3 , 7 , 4,五、程序分析题36,#include,class Location ,int X , Y ;,public:,void init(int=0, int=0);,void valueX(int val) X=val;,int valueX( ) return X; ,void valueY(int val) Y=val; ,int valueY( ) return Y; ,;,void Location:,init(int initX, int initY),X=initX ;,Y=initY ;,void main( ) ,Location A,B;,A.init( );,coutA.valueX( )endl;,A.valueX(5);,coutA.valueX( )endl,A.valueY( )endl;,B.init(6,2);,B.valueY(4);,coutB.valueX( )endl,B.valueY( )endl;,函数重载,答案:,0 5 0 6 4,2001年下半年高等教育自学考试全国统一命题考试,面向对象程序设计 试卷,试卷题型,满分100分,考试时间150分钟,一、单项选择题(10小题,20分),二、填空题(10小题,20分),三、改错题(5小题,10分),四、完成程序题(5小题,20分),五、程序分析题(6小题,30分),一、选择题1,在,C+,中,函数原型不能标识,A.,函数的返回类型,B.,函数参数的个数,C.,函数参数类型,D.,函数的功能,考点:函数原型声明,解释:,1.,C+,中重视函数原型的声明,2.,函数原型声明什么,一、选择题2,在,C+,程序中,对象之间的相互通信通过,A.,继承实现,B.,调用成员函数实现,C.,封装实现,D.,函数重载实现,考点:对象的概念,解释:,1.,面向对象中对象的概念,2.,对象之间的关系,-,消息传递,一、选择题5,友元关系不能,A.,继承,B.,是类与类的关系,C.,是一个类的成员函数与另一个类的关系,D.,提高程序的运行效率,考点:友元的概念,解释:,1.,友元函数是函数与类的关系,2.,友元类是类与类的关系,3.,友元可以提高效率,4.,注意问不能的是,一、选择题6,语句,ofstream f(“SALARY.dat”,ios:app|ios:binary);,的功能是建立流对象,f,,试图打开文件,并与之连接,并且,A.,若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件,B.,若文件存在,将其置为空文件;若文件不存在,打开失败,C.,若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件,D.,若文件存在,打开失败;若文件不存在,建立一个新文件,考点:文件流打开文件的方式,解释:,1.,ios:app 2. ios:binary,一、选择题7,下面说法正确的是,A.,内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方,B.,内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方,C.,类的内联函数必须在类体内定义,D.,类的内联函数必须在类体外通过加关键字,inline,定义,考点:内联函数的概念和定义方法,解释:,1.,内联函数兼顾效率和逻辑模块化,2.,类的内联函数可以采用两种方法定义,一、选择题8,可以用,的形式访问派生类对象,p,的基类成员,a,,其中,a,是,A.,私有继承的公有成员,B,.,公有继承的私有成员,C.,公有继承的保护成员,D.,公有继承的公有成员,考点:继承和访问权限的关系,解释:基类成员访问权限,+,继承访问控制,=,基类成员在派生类中的访问权限,二、填空题11,定义类的动态对象数组时,系统只能够自动调用该类的,_,构造函数对其进行初始化。,考点:,构造函数的概念,解释:,1.,构造函数完成初始化工作,2.,创建动态对象数组的特点,ClassA * p= new ClassA10;,缺省(无参),二、填空题12,在,C+,程序设计中,建立继承关系倒挂的树应使用,_,继承。,考点:,继承的种类,解释:,1.,单一继承和多重继承,2.,单一继承形成树(倒挂的树) 多重继承形成图(有向无环图),单一,二、填空题18,将关键字,const,写在成员函数的,_,和,_,之间时,所修饰的是,this,指针。,考点:,const,成员函数的含义,解释:,1.,const,成员函数中,const,修饰,this,指针,成员函数中,const,的具体位置,函数头,函数体,三、改错题21,指出下面程序段中的错误,并说明出错原因,class A ,int,a,b;,public:,A(,int,aa,int bb), a=aa; b=bb;,;,A x(2,3), y(4) ;,考点:,构造函数的应用,解释:,对象创建时自动调用该类的构造函数,构造函数的原型要和创建对象时一致,三、改错题23,指出下面程序段中的错误,并说明出错原因,考点:标识符(类名)的使用规则,解释:,C+,是强类型语言,标识符使用之前需要声明其类型,对类而言,要有引用性声明或者定义性声明,class one,private: int a;,public: void fonc(two,;,class two,private: int b;,friend void one:func(two,;,void one:func(two& r),a=r.b;,class two;,class one;,class two;,三、改错题25,指出下面程序段中的错误,并说明出错原因,考点:类的声明,解释:,类的声明中对数据成员而言只能声明其数据类型,不能赋初值,class Location,int X, Y=20;,protected:,int zeroX, zeroY;,int SetZero(int ZeroX, int ZeroY);,private: int length, height;,public:,float radius;,void init(int initX, int initY);,int GetX();,int GetY();,;,四、完成程序题26,在下面程序横线处填上适当字句,完成类中成员函数的定义,class A,int * a;,public:,A(int aa=0),a=_;,/用aa初始化a所指向的动态对象,A( ) _; /释放动态存储空间,;,new int(aa),delete a, 考点:构造函数的作用, 解释:指针初始化,分清区别,new int(),new int,四、完成程序题29,下面是类,fraction(,分数,),的定义,其中重载的运算符,以分数形式输出结果。,class fraction,int den;,int num;,friend ostream,;,ostream& operator(ostream& os, fraction fr),_;,return _;,osfr.den“/”fr.numendl,os, 考点:采用友元函数实现输出运算符, 解释:,输出运算符函数的写法,友元函数访问对象成员的方法,四、完成程序题30,在下面程序横线处填上适当的字句,使其输出结果为,0,56,56,virtual int,void, 考点:多态性的应用, 解释:根据输出结果判断虚函数,#include,class base,public : _func() return 0; ,;,class derived: public base,public: int a,b,c;,_ setValue(int x,int y,int z),a=x;b=y;c=z;,int func()return (a+b)*c;,;,void main(),base b;,derived d;,coutb.func(),;,d.setValue(3,5,7);,coutd.func(),;,base,coutpb.func()endl;,五、程序分析题31,#include,void main(),int* a;,int* ,int b=10;,p=,cout*a;,引用,答案:,10,五、程序分析题33,#include,void main(),for(int i=0;i4;i+),coutendlsetfill( )setw(4-i)0,0?0: );,格式控制,答案:,_ _ _ 0 _,_ _ 0 * 0,_ 0 * * * 0,0 * * * * * 0,五、程序分析题35,#include,class A,public: A() ,virtual void func()cout“DestructorA”endl;,A()func();,;,class B: public A,public: B() ,void func()cout“DestructorB”endl;,B()func();,;,void main(),B b;,A,析构函数,答案:,DestructorB,DestructorA,五、程序分析题36,#include,class MyClass,public: int number;,void set(int i);,;,int number=3;,void MyClass:set(int i) number=i; ,void main(),MyClass my1;,int number=10;,my1.set(5); coutmy1.numberendl;,my1.set(number); coutmy1.numberendl;,my1.set(:number); coutmy1.numberendl;,变量作用域,答案:,5,10,3,Q & A,
展开阅读全文