《面向对象程序设计 C++ 试卷分析.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计 C++ 试卷分析.ppt(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.函数定义不能嵌套,考点:C+语言和C语言的异同解释:1.C+语言是对C语言的扩充,其中主要增加了面向对象的支持;2.面向对象概念,一、选择题2,通常情况下,函数模板中的类型参数个数不能是 A.0B.2C.4
2、D.3,考点:函数模板的概念 解释:根据传入参数的不同类型,函数模板可以被实例化为不同的模板函数。这就要求函数模板的类型参数至少有1个,否则无法针对不同类型进行实例化。,一、选择题3,在下列成对的表达式中,运算符“+”的意义不相同的一对是 A.5.0+2.0和5.0+2B.5.0+2.0和5+2.0C.5.0+2.0和5+2D.5+2.0和5.0+2,考点:运算中涉及到的数据类型问题解释:运算符连接的操作数一般数据类型相同,如果不同则针对某个操作数进行隐式的类型转换,使得两者按照相同的数据类型进行运算。,一、选择题4,类的指针成员的初始化是通过函数完成的,这个函数通常是 A.析构函数B.构造函
3、数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保留字表示常量,即程序运行中不可以修改其值;2.const保留字的位置:一般放在数据类型之前,一、
4、选择题 5续,解释:3.指针标识符比较特殊,用const修饰指针变量就涉及到两种情况:如果需要声明指针变量本身不可修改,则const直接放在数据类型和星号之后,标识符之前,形如type*const p;而如果需要声明指针指向的数据不可以修改,则const放在数据类型和星号之前,形如const type*p。,一、选择题6,静态成员函数没有 A.返回值B.this指针C.指针参数D.返回类型,考点:类中静态成员函数的概念 解释:静态成员函数为类的所有对象共享,被存储在一个公用内存中。因此,静态成员函数不指向某个具体的对象,也没有this指针。什么是this指针?,一、选择题7,当一个类的某个函数
5、被说明为virtual时,该函数在该类的所有派生类中 A.都是虚函数 B.只有被重新说明时才是虚函数 C.只有被重新说明为virtual时才是虚函数 D.都不是虚函数,考点:虚函数的概念 解释:虚函数是为实现某种功能而假设的函数,用关键字virtual修饰,常用来实现多态性和动态联编。假定在基类中定义了虚函数,而在派生类中又定义了一个同名的成员函数,它都将成为一个虚函数。,一、选择题8,下面叙述不正确的是 A.派生类一般都用公有派生 B.对基类成员的访问必须是无二义性的 C.赋值兼容规则也适用于多重继承的组合 D.基类的公有成员在派生类中仍然是公有的,考点:继承和派生的概念 解释:继承是面向对
6、象的基本概念之一,体现了类之间的一般-特殊关系。继承和派生是从一个或者多个以前定义的基类继承数据和函数,同时增加或者重新定义数据和操作。,一、选择题 8续,解释:排除法A.派生类一般都用公有派生类的派生具有访问控制机制,分为公有派生和私有派生 B.对基类成员的访问必须是无二义性的类的继承分为单一继承和多重继承,多重继承访问基类时可能二义性问题C.赋值兼容规则也适用于多重继承的组合赋值兼容规则指在公有派生情况下,一个派生类的对象可以作为基类的对象来使用D.基类的公有成员在派生类中仍然是公有的通过私有派生,基类的公有成员在派生类中是私有的。,一、选择题9,在C+中实现封装是借助于 A.枚举B.类C
7、.数组D.函数,考点:面向对象概念中对封装的理解 解释:封装是面向对象方法的一个重要原则,它有两个含义1.把对象的全部属性和操作全部结合在一起;2.隐蔽对象的内部细节,对外形成一个边界,一、选择题10,所有在函数中定义的变量,都是 A.全局变量B.局部变量C.静态变量D.寄存器变量,考点:程序设计语言中变量的分类 解释:按照作用域分,变量可以分为全局变量和局部变量;静态变量存放在全局数据区;寄存器变量存放在CPU寄存器中,加快运算速度,二、填空题11,设函数max是由函数模板实现的,并且max(3.5,5)和max(10,5)都是正确的函数调用,则该模板具有_个类型参数。,考点:函数模板的应用
8、 解释:函数模板经过实例化得到模板函数,如果根据模板函数反推函数模板的类型参数,可以从变化的参数调用中来考虑。,1个或者2个,二、填空题12,在单继承和多继承方式中,面向对象的程序设计应尽量使用_继承。,考点:面向对象概念中继承的实现问题 解释:设计中尽量采用单一继承,原因如下1.单一继承比较简单,派生类只有一个基类,多重继承可能出现二义性问题;2.某些面向对象的程序设计语言不支持多重继承,单,二、填空题13,语句序列ifstream datafile;datafile.open(“data.dat”);的功能可用一个语句实现,这个语句是_。,考点:构造函数的使用以及文件输入流类的用法 解释:
9、类的构造函数可能有多个,程序中可以选择合适的构造函数来简化程序 文件输入流类ifstream还提供了直接使用文件名作为参数的构造函数ifstream(char*filename),ifstream datafile(“data.dat”);,二、填空题14,将关键字const写在函数头之后,函数体之前,说明该函数是一个const成员函数。此时const不是指定函数的返回值,而是修饰_指针。,考点:const修饰带有this指针的成员函数的情况 解释:C+常向非静态成员函数传递不可见的this指针,通过它成员函数得以存取成员数据。仿照const修饰指针标识符的情况,根据const的位置可以判断,
10、此处用于修饰this指针,this,二、填空题15,一个抽象类的派生类可以实例化的必要条件是实现了所有的_。,考点:抽象类和纯虚函数的概念 解释:抽象类包含纯虚函数的类;纯虚函数没有实现体的虚函数;一个抽象类只能作为基类来派生新类,不能声明抽象类的对象。说明:答“虚函数”不确切,不理解抽象类的概念,纯虚函数,二、填空题16,在C+中,虚函数帮助实现了类的_性。,考点:多态性的概念 解释:多态性即多种形态,指可以根据运行情况的不同而执行不同的操作。而虚函数一般用在类等级中,在基类中定义公共的虚函数,而在派生类中重载该虚函数。这样当虚函数被调用时,会根据当前对象的不同类型而执行相应的代码,从而实现
11、了类的多态性。,多态,二、填空题17,通过C+语言中类的_,可以扩充和完善已有类以适应新的需求。,考点:面向对象中继承的概念 解释:继承是面向对象的重要原则之一,它支持从已有对象类型出发建造新的对象类型,从而达到扩充和完善已有类型的目的 说明:继承、派生在这里通用,继承(派生),二、填空题18,为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要为该类定义_。,考点:析构函数的概念 解释:析构函数是类中一种特殊的成员函数,它对应于构造函数,在对象消失时自动执行,用于完成一些清理任务。,析构函数,二、填空题19,在联合中,所有数据成员具有_的地址,任一时刻只有_个数据成员有效。,考
12、点:联合的概念 解释:联合是一种自定义类型,它虽然由若干数据成员组成,但是这些数据成员使用同一地址,因此在同一时刻只拥有一个数据成员的值。,相同,一,二、填空题20,在已经定义了整型指针ip后,为了得到一个包含10个整数的数组并由ip所指向,应使用语句_。,考点:数组指针的应用 解释:在C语言中,指针表示指向某块内存空间的地址,通过指针可以访问所指向的数据。而数组是一个由若干同类型变量组成的集合,它在内存中占据连续的存储单元,起始地址对应于数组的第一个元素。因此可以通过指针指向数组第一个元素来引用数组中各元素。,p=new int10;,三、改错题21,下面的类定义有一处错误,请用下横线标出错
13、误所在行并改正错误。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;inf.close();,三、改错
14、题 22续,考点:文件流类的用法 解释:C+中提供了支持文件流操作的类库fstream.h,其中包括主要的文件流类ifstream和ofstream ifstream读文件时读取的字符串以空格、制表符和回车作为结束,所以原程序不能完全满足要求,显示出来的字符串只有”Look”。,char k20;inf k;cout k;,char k20;int i=0;char ch;while(inf.get(ch)ki+=ch;ki=0;,三、改错题23,下面的程序有一处错误,请用下横线标出错误所在行并改正错误。,考点:对静态成员变量的操作 解释:静态成员不同于类的简单成员,它不指向某个具体的对象,只
15、与类名连用。引用方法:类名:成员,#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#includeclass A public:A(const char*mn)strcpy(name,nm);private:char name80;class
16、 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函数中的错误所在行,并说明错误原因。,四、完成程序题26,在下面程序横线处填写适当内容,以使该程序执行结果为:12 88,T x,y;,sizeof(T),四、完成程序题 26续,考点:类模板的应用 解释:类模板是将数据类型从类中分离出来,允许单个类处理
17、通用的数据类型T,这样类模板与某种特定数据类型联系起来,就产生了一个真实的类。空:根据类模板中pr函数的实现和main函数中模板类对象的初始化可以确定。空:可以根据pr函数调用和执行结果来推断。,四、完成程序题27,在下面的横线处填上适当内容,使程序完整。,float x1,float y1,static,四、完成程序题28,在下面程序中的横线处填上适当内容,使程序完整。,virtual int,&v1,&v2,四、完成程序题 28续,考点:多态性的应用 解释:通过构建类层次来实现多态空可以根据main函数中maxSpeedLevel的函数调用、函数实现部分以及两个派生类的getSpeedLe
18、vel函数定义来推断 空、空可以根据程序输出结果和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的值为ivoid print()A:print();cout b1“,”b2 endl;private:int b1,b
19、2;,int i;,A(i),四、完成程序题30,根据注释在空白处填写适当内容。,Location&rA1=A1,coutrA1.GetX()rA1.GetY()endl;,五、程序分析题31,构造函数操作符重载,答案:3,7,9,1,5,4,五、程序分析题32,类模板,答案:10.5-5.8 i 10+0 i,五、程序分析题33,静态成员变量和函数,答案:Result1=200 Result2=201 Result3=125,五、程序分析题34,多态性,答案:This is class A printing.This is class C printing.,五、程序分析题35,类的继承,答
20、案:1,5,23,7,4,五、程序分析题36,函数重载,答案: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.继承实
21、现B.调用成员函数实现C.封装实现D.函数重载实现,考点:对象的概念解释:1.面向对象中对象的概念 2.对象之间的关系-消息传递,一、选择题5,友元关系不能A.继承B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.提高程序的运行效率,考点:友元的概念解释:1.友元函数是函数与类的关系 2.友元类是类与类的关系 3.友元可以提高效率 4.注意问不能的是,一、选择题6,语句ofstream f(“SALARY.dat”,ios:app|ios:binary);的功能是建立流对象f,试图打开文件SALARY.dat并与之连接,并且A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立
22、一个新文件B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件,考点:文件流打开文件的方式解释:1.ios:app 2.ios:binary,一、选择题7,下面说法正确的是A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义 D.类的内联函数必须在类体外通过加关键字inline定义,考点:内联函数的概念和定义方法解释:1.内联函数兼顾效率和逻辑模块化 2.类的内联
23、函数可以采用两种方法定义,一、选择题8,可以用p.a的形式访问派生类对象p的基类成员a,其中a是A.私有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.公有继承的公有成员,考点:继承和访问权限的关系解释:基类成员访问权限+继承访问控制=基类成员在派生类中的访问权限,二、填空题11,定义类的动态对象数组时,系统只能够自动调用该类的_构造函数对其进行初始化。,考点:构造函数的概念 解释:1.构造函数完成初始化工作 2.创建动态对象数组的特点 ClassA*p=new ClassA10;,缺省(无参),二、填空题12,在C+程序设计中,建立继承关系倒挂的树应使用_继承。,考点:继承的种
24、类 解释:1.单一继承和多重继承 2.单一继承形成树(倒挂的树)多重继承形成图(有向无环图),单一,二、填空题18,将关键字const写在成员函数的_和_之间时,所修饰的是this指针。,考点:const成员函数的含义 解释:1.const成员函数中const修饰this指针 2.const成员函数中const的具体位置,函数头,函数体,三、改错题21,指出下面程序段中的错误,并说明出错原因 class A int a,b;public:A(int aa,int bb)a=aa;b=bb;A x(2,3),y(4);,考点:构造函数的应用 解释:对象创建时自动调用该类的构造函数,构造函数的原型
25、要和创建对象时一致,三、改错题23,指出下面程序段中的错误,并说明出错原因,考点:标识符(类名)的使用规则解释:C+是强类型语言,标识符使用之前需要声明其类型,对类而言,要有引用性声明或者定义性声明,class one private:int a;public:void fonc(two,void one:func(two,class two;class one;class two;,三、改错题25,指出下面程序段中的错误,并说明出错原因,考点:类的声明解释:类的声明中对数据成员而言只能声明其数据类型,不能赋初值,class Location int X,Y=20;protected:int
26、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,在下面程序横线处填上适当字句,完成类中成员函数的定义,new int(aa),delete a,考点:构造函数的作用 解释:指针初始化 分清区别 new int()new int,四、完成程序题29,下面是类fraction(分数)的定义,其中重载的运算符以分数形式输出结果。,osfr.
27、den“/”fr.numendl,os,考点:采用友元函数实现输出运算符 解释:输出运算符函数的写法 友元函数访问对象成员的方法,四、完成程序题30,在下面程序横线处填上适当的字句,使其输出结果为0,56,56,virtual int,void,考点:多态性的应用 解释:根据输出结果判断虚函数,五、程序分析题31,#includevoid main()int*a;int*,引用,答案:10,五、程序分析题33,#includevoid main()for(int i=0;i0?0:);,格式控制,答案:_ _ _ 0 _ _ 0*0_ 0*00*0,五、程序分析题35,#includeclas
28、s 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,析构函数,答案:DestructorBDestructorA,五、程序分析题36,#includeclass 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;,变量作用域,答案:5103,Q&A,