面向对象程序设计 C++ 试卷分析



《面向对象程序设计 C++ 试卷分析》由会员分享,可在线阅读,更多相关《面向对象程序设计 C++ 试卷分析(66页珍藏版)》请在装配图网上搜索。
1、,,,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二层,,第三层,,第四层,,第五层,,,*,面向对象程序设计 试卷分析,,2004-9-28,,,2003年下半年高等教育自学考试全国统一命题考试,,面向对象程序设计 试卷,,试卷题型,,满分100分,考试时间150分钟,,一、单项选择题(10小题,20分),,二、填空题(10小题,20分),,三、改错题(5小题,10分),,四、完成程序题(5小题,20分),,五、程序分析题(6小题,30分),,一、选择题1,,下列特性中,,C,与,C++,共有的是,,,A.,继承,B.,封装,,,C.,多态性,D.,函数定义不能嵌套,考点:
2、,C++,语言和,C,语言的异同,,解释:,1. C++,语言是对,C,语言的扩充,其中主要增加了面向对象的支持;,2.,面向对象概念,,一、选择题2,,通常情况下,函数模板中的类型参数个数,不能,是,,,A. 0 B. 2,,C. 4 D. 3,考点:,函数模板的概念,,,解释:,根据传入参数的不同类型,函数模板可以被实例化为不同的模板函数。这就要求函数模板的类型参数至少有,1,个,,,否则无法针对不同类型进行实例化。,,一、选择题3,,在下列成对的表达式中,运算符“,+”,的意义,不相同,的一对是,,,和,和,,和,和,5.0+2,考点:,运算中涉及到的数据类型问题,,解释:,运算符连
3、接的操作数一般数据类型相同,如果不同则针对某个操作数进行隐式的类型转换,使得两者按照相同的数据类型进行运算。,,一、选择题4,,类的指针成员的初始化是通过函数完成的,这个函数通常是,,,A.,析构函数,B.,构造函数,,,C.,其他成员函数,D.,友元函数,考点:,类的构造函数的理解,,,解释:,在面向对象概念中,为了使对象的状态确定,需要在对象创建时进行正确的初始化,这一任务由构造函数来完成。,,一、选择题5,,要禁止修改指针,p,本身,又要禁止修改,p,所指向的数据,这样的指针应定义为,,,A. const char *p=“ABCD”; B.,,char const *p=“AB
4、CD”;,,,C.,,char * const p=“ABCD”; D. const char * const p=“ABCD”;,考点:,const,修饰指针标识符的用法,,解释:,1.,使用,const,保留字表示常量,即程序运行中不可以修改其值;,保留字的位置:一般放在数据类型之前,,,一、选择题 5续,,解释:,3.,指针标识符比较特殊,用,const,修饰指针变量就涉及到两种情况:,,如果需要声明指针变量本身不可修改,则,const,直接放在数据类型和星号之后,标识符之前,形如,type * const p,;,,而如果需要声明指针指向的数据不可以修改,则,const,放在数据
5、类型和星号之前,形如,const type* p,。,,,一、选择题6,,静态成员函数没有,,,A.,返回值,B. this,指针,,,C.,指针参数,D.,返回类型,考点:类中,静态成员函数的概念,,解释:,静态成员函数为类的所有对象共享,被存储在一个公用内存中。因此,静态成员函数不指向某个具体的对象,也没有,this,指针。 什么是,this,指针?,,,一、选择题7,,当一个类的某个函数被说明为,virtual,时,该函数在该类的所有派生类中,,,A.,都是虚函数,B.,只有被重新说明时才是虚函数,C.,只有被重新说明为,virtual,时才是虚函数,D.,都不是虚函数,考点:,虚函数
6、的概念,,,解释:,虚函数是为实现某种功能而假设的函数,用关键字,virtual,修饰,常用来实现多态性和动态联编。 假定在基类中定义了虚函数,而在派生类中又定义了一个同名的成员函数,它都将成为一个虚函数。,,一、选择题8,,下面叙述,不正确,的是,,,A.,派生类一般都用公有派生,B.,对基类成员的访问必须是无二义性的,C.,赋值兼容规则也适用于多重继承的组合,D.,基类的公有成员在派生类中仍然是公有的,考点:,继承和派生的概念,,解释:继承是面向对象的基本概念之一,体现了类之间的一般,-,特殊关系。,继承和派生是从一个或者多个以前定义的基类继承数据和函数,同时增加或者重新定义数据和操作,
7、。,,一、选择题 8续,,解释:排除法,A.,派生类一般都用公有派生,,类的派生具有访问控制机制,分为公有派生和私有派生,,B.,对基类成员的访问必须是无二义性的,类的继承分为单一继承和多重继承,,,多重继承访问基类时 可能二义性问题,C.,赋值兼容规则也适用于多重继承的组合,赋值兼容规则指在公有派生情况下,一个派生类的对象 可以作为基类的对象来使用,D.,基类的公有成员在派生类中仍然是公有的,通过私有派生,基类的公有成员在派生类中是私有的。,,一、选择题9,,在,C++,中实现封装是借助于,,,A.,枚举,B.,类,,,C.,数组,D.,函数,考点:,面向对象概念中对封装的理解,,,解释
8、:,封装是面向对象方法的一个重要原则,它有两个含义,——1.,把对象的全部属性和操作全部结合在一起,;2.,隐蔽对象的内部细节,对外形成一个边界,,一、选择题10,,所有在函数中定义的变量,都是,,,A.,全局变量,B.,局部变量,,,C.,静态变量,D.,寄存器变量,考点:,程序设计语言中变量的分类,,解释:,按照作用域分,变量可以分为全局变量和局部变量;静态变量存放在全局数据区;寄存器变量存放在,CPU,寄存器中,加快运算速度,,二、填空题11,,设函数,max,是由函数模板实现的,并且,max(3.5,5),和,max(10,5),都是正确的函数调用,则该模板具有,_________
9、_,个类型参数。,考点:,函数模板的应用,,解释:,函数模板经过实例化得到模板函数,如果根据模板函数反推函数模板的类型参数,可以从变化的参数调用中来考虑。,1,个或者,2,个,,,二、填空题12,,在单继承和多继承方式中,面向对象的程序设计应尽量使用,_____,继承。,考点:,面向对象概念中继承的实现问题,,解释:,设计中尽量采用单一继承,,原因如下,1.,单一继承比较简单,派生类只有一个基类,,多重继承可能出现二义性问题;,2.,某些面向对象的程序设计语言不支持多重继承,,单,,二、填空题13,,语句序列,ifstream,,datafile,;,datafile,.open(“data.
10、,dat,”);,的功能可用一个语句实现,这个语句是,_________,。,考点:,构造函数的使用以及文件输入流类的用法,,解释:,类的构造函数可能有多个,程序中可以选择合适的构造函数来简化程序 文件输入流类,ifstream,还提供了直接使用文件名作为参数的构造函数,ifstream,(char* filename),ifstream datafile(“data.dat”);,,二、填空题14,,将关键字,const,写在函数头之后,函数体之前,说明该函数是一个,const,成员函数。此时,const,不是指定函数的返回值,而是修饰,________,指针。,考点:,const,修饰
11、带有,this,指针的成员函数的情况,,解释:,C++,常向非静态成员函数传递不可见的,this,指针,通过它成员函数得以存取成员数据。 仿照,const,修饰指针标识符的情况,根据,const,的位置可以判断,此处用于修饰,this,指针,this,,二、填空题15,,一个抽象类的派生类可以实例化的必要条件是实现了所有的,________,。,考点:,抽象类和纯虚函数的概念,,解释:,抽象类,—,包含纯虚函数的类; 纯虚函数,—,没有实现体的虚函数; 一个抽象类只能作为基类来派生新类,不能声明抽象类的对象。,,说明:答“虚函数”不确切,不理解抽象类的概念,纯虚函数,,二、填空题16,
12、,在,C++,中,虚函数帮助实现了类的,_____,性。,考点:,多态性的概念,,解释:,多态性即多种形态,指可以根据运行情况的不同而执行不同的操作。 而虚函数一般用在类等级中,在基类中定义公共的虚函数,而在派生类中重载该虚函数。 这样当虚函数被调用时,会根据当前对象的不同类型而执行相应的代码,从而实现了类的多态性。,多态,,二、填空题17,,通过,C++,语言中类的,__________,,可以扩充和完善已有类以适应新的需求。,考点:,面向对象中继承的概念,,解释:,继承是面向对象的重要原则之一,它支持从已有对象类型出发建造新的对象类型,从而达到扩充和完善已有类型的目的,,说明:继承
13、、派生在这里通用,继承(派生),,二、填空题18,,为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要为该类定义,_________,。,考点:,析构函数的概念,,解释:,析构函数是类中一种特殊的成员函数,它对应于构造函数,在对象消失时自动执行,用于完成一些清理任务。,析构函数,,二、填空题19,,在联合中,所有数据成员具有,_____,的地址,任一时刻只有,_____,个数据成员有效。,考点:,联合的概念,,解释:,联合是一种自定义类型,它虽然由若干数据成员组成,但是这些数据成员使用同一地址,因此在同一时刻只拥有一个数据成员的值。,相同,一,,二、填空题20,,在已经定义了整
14、型指针,ip,后,为了得到一个包含,10,个整数的数组并由,ip,所指向,应使用语句,___________________,。,考点:,数组指针的应用,,解释:,在,C,语言中,指针表示指向某块内存空间的地址,通过指针可以访问所指向的数据。 而数组是一个由若干同类型变量组成的集合,它在内存中占据连续的存储单元,起始地址对应于数组的第一个元素。因此可以通过指针指向数组第一个元素来引用数组中各元素。,p=new int[10];,,,三、改错题21,,下面的类定义有一处错误,请用下横线标出错误所在行并改正错误。,,,,class A {,,,int,a;,,public:,,A(,int,
15、,aa,) : a=,aa,{ },,};,考点:,构造函数的实现,,,解释:,成员变量的初始化可以放在函数体中实现,也可以直接放在函数名和函数体之间通过初始化列表的形式实现。,,,,三、改错题22,,下面的程序先把字符串”,Look out!”,输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为,Look out!,。,程序中有一处错误,请用下横线标出错误所在行,并给出更改意见。,,,#include ,,void main( ) {,,ofstream outf(“D:\\tem.dat”, ios::trunc) ;,,outf << “Look out!” ;,,out
16、f.close( ) ;,,ifstream inf(“D:\\tem.dat”) ;,,char k[20] ; inf >> k ; cout << k ;,,inf.close( ) ;,,},,三、改错题 22续,,考点:文件流类的用法,,,解释:C++中提供了支持文件流操作的类库fstream.h,其中包括主要的文件流类ifstream和ofstream,,ifstream读文件时读取的字符串以空格、制表符和回车作为结束,所以原程序不能完全满足要求,显示出来的字符串只有”Look”。,,char k[20] ;,,inf >> k ;,,cout << k ;,,char k[2
17、0] ;,,int i = 0 ; char ch ;,,while( inf.get(ch) ),,k[i++]=ch ;,,k[i]=’\0’ ;,,三、改错题23,,下面的程序有一处错误,请用下横线标出错误所在行并改正错误。,,考点:,对静态成员变量的操作,,,解释:,静态成员不同于类的简单成员,它不指向某个具体的对象,只与类名连用。,,引用方法:类名,::,成员,,#include ,,class Test {,,public:,,static int x ;,,};,,int x=20;,,void main( ) {,,cout << Test::x ;,,},int Test:
18、:x=20;,,,三、改错题24,,右面的程序类,B,的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。,,考点:,类成员访问权限,,,解释:类成员的,访问权限,分别用,private,、,public,和,protected,表示私有、公有和保护,,,#include ,,#include,,class A {,,public: A(const char * mn) {strcpy(name, nm); },,private: char name[80] ;,,};,,class B: public A {,,public: B(const char * nm) : A(nm)
19、{ },,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);,
20、,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;,,cout< 21、lude ,,template ,,class Tany {,,public:,,_______________;,,void pr( ) {,,if (sizeof(int) == ________ ),,cout y ? x : y)< 22、模板的应用,,解释:类模板是将数据类型从类中分离出来,允许单个类处理通用的数据类型T,这样类模板与某种特定数据类型联系起来,就产生了一个真实的类。 空①:根据类模板中pr函数的实现和main函数中模板类对象的初始化可以确定。 空②:可以根据pr函数调用和执行结果来推断。,,四、完成程序题27,,在下面的横线处填上适当内容,使程序完整。,,,#include ,,#include ,,class loc {,,private :,,float x , y ;,,public :,,loc ( __________________ ),,{,,x=x1 ;,,y=y1 ;,,},,float 23、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 ”< 24、at x1, float y1,,static,,#include ,,class vehicle {,,protected :,,int size ;,,int speed ;,,public :,,void setSpeed(int s) { speed=s; },,_______ getSpeedLevel( ),,{ return speed / 10 ; },,} ;,,class car : public vehicle {,,public : int getSpeedLevel( ),,{ return speed / 5 ; },,};,class truck : p 25、ublic vehicle {,,public: int getSpeedLevel( ){ return speed/15;},,};,,int maxSpeedLevel(vehicle____,vehicle____),,{ if (v1.getSpeedLevel( )>v2.getSpeedLevel( )),,return 1;,,else,,return 2; },,void main( ) {,,truck t ; car c ;,,t.setSpeed(130); c.setSpeed(60);,,cout< 26、//此处结果输出为2,,},①,②,③,四、完成程序题28,,在下面程序中的横线处填上适当内容,使程序完整。,,,virtual int,&v1,&v2,,四、完成程序题 28续,,考点:多态性的应用,,解释:通过构建类层次来实现多态 空①可以根据main函数中maxSpeedLevel的函数调用、函数实现部分以及两个派生类的getSpeedLevel函数定义来推断 空②、空③可以根据程序输出结果和maxSpeedLevel函数体来推断,,四、完成程序题29,,在下面横线处填上合适内容,完成类,B,的定义。,,,#include ,,class A {,,public : A( ) { 27、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 < 28、: 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::Get 29、Y( ) { return Y; },,#include,,void main( ),,{,,Location A1; A1.init(20,90);,,,①,_________________;,,//定义一个指向A1的引用rA1,,,②,_________________;,,//用rA1在屏幕上输出对象A1的数据成员X和Y的值,,},Location & rA1=A1,,cout< 30、 //数组元素个数,,public:,,FunArray(int a[ ], int thesize),,:pa(a), size(thesize) { },,int Size( ) { return size; },,int& operator[ ](int index),,{ return pa[index-1] ; },,};,void main( ) {,,int s[ ] = { 3,7,2,1,5,4 } ;,,FunArray ma(s, sizeof(s)/sizeof(int));,,ma[3]=9 ;,,for(int i=1 ; i<=ma.Size(); i+ 31、+),,cout << ma[i] << ‘,’ ;,,},构造函数,,操作符重载,答案:,,3,7,9,1,5,4,,,五、程序分析题32,,,#include,,template,,class Tclass {,,T x , y ;,,public:,,Tclass(T a , T b):x(a) { y=b ; },,Tclass(T a) { y=(T)0, x=a ; },,void pr( ){,,char c;,,c=( y >= (T)0 ?’+’ : ’-’ ) ;,,cout << x << c <<,,(y > (T)0 ? y : -y )<<“i”< 32、},,} ;,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( ),,{,,retur
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。