考试试题答案要点_第1页
考试试题答案要点_第2页
考试试题答案要点_第3页
考试试题答案要点_第4页
考试试题答案要点_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象程序设计考试试题答案一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内。每小题1分,共20分)1 面向对象程序设计将数据与_a_放在一起,作为一个相互依存、不可分割的整体来处理。A.对数据的操作 B.信息C.数据隐藏 D.数据抽象2. _a_不是面向对象系统所包含的要素。A.重载 B.对象C.类 D.继承3. 按照标识符的要求,_a_符号不能组成标识符。A.连接符 B.下划线C.大小写字母 D.数字字母4. 已知ch是字符型变量,下面正确的赋值语句是_b_。A.ch=123; B.ch=xff;C.ch=08; D.ch=”;5. 要求通过函数来

2、实现一种不太复杂的功能,并且要求加快执行速度,选用_a_。A.内联函数 B.递归调用C.重载函数 D.嵌套调用6. _c_的功能是对对象进行初始化。A.析构函数 B.数据成员C.构造函数 D.静态成员函数7. 在下列关键字中,用以说明类中公有成员的是_a_。A.public B.privateC.protected D.friend8. _D_无返回类型,但又有return语句。A.虚函数 B.内联函数C.友元函数 D.类型转换函数9. 类模板的使用实际上是将类模板实例化成一个具体的_A_。A.类 B.对象C.函数 D.模板类10. 利用友元函数重载“>>”运算符,第2个参数必须为

3、_c_。 A.指针 B.对象C.引用 D.无值11. 用成员函数重载二元运算符,则显式调用方式为_C_。A.obj1.operator(obj2) B.operator(obj1,obj2)C.obj1.operator( ) D.obj1obj212. 通常拷贝构造函数的参数是_c_。A.某个对象名 B.某个对象的成员名C.某个对象的引用名 D.某个对象的指针名13. 已知一个类A,_B_是指向类A成员函数的指针。假设类有三个公有成员:void f1(int),void f2(int)和int a。A.A *p B.int A:*pc=&A:aC.void A:*pa D.A *pp

4、14. 用struct定义类,若它的成员缺省段约束符的说明,其成员是_b_的成员。A.私有段 B.公有段C.特殊段 D.保护段15. 下列定义中,_A_是定义指向数组的指针p。A.int *p5 B.int (*p)5C.(int *)p5 D.int *p16. C+中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系 统的运行;另一种是通过_c_,派生出新的类。A.复用 B.单继承C.继承 D.多继承17. 派生类的对象对它的基类成员中_A_是可以访问的。A.公有继承的公有成员 B.公有继承的私有成员C.公有继承的保护成员 D.私有继承的公有成员18. 说明静态成员函数的关键字为_

5、a_。A.static B.virtualC.friend D.void19. 下列运算符中,_c_运算符在C+中不能重载。A.?: B.+C.- D.<=20. cin是_b_类的标准对象的引用。A.ostream B.istreamC.stdin D.stdout二、多项选择题(在每小题的五个备选答案中,选出若干个正确的答案,并将其号码分别填在题干后的括号内;多选、少选、错选均无分。每小题2分,共10分)1. 若给出函数声明: void f(int a=1,int b=2,int c=3,int d=4); 下面的函数调用合法的有_ABD_。A.f( ) B.f(5) C.f(5,6

6、)D.f(5,6,7) E.f(5,6,7,8)2. 不能用友元函数重载的运算符有_ABDE_。 A.= B. C.+D.-> E.( ) 3. 对一元运算符进行重载后,正确的显式调用方式有_BD_。A.a B.operator(a) C.abD.a.operator( ) E.a4. 关于构造函数,正确的描述有_。A.可以是虚函数 B.可以有参数 C.可以被继承D.可以重载 E.可以显式调用5. C+的模板有_DE_模板。A.运算符 B.数据 C.类型D.类 E.函数三、名词解释(每小题2分,共8分)1. 封装性:封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就

7、是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。2. 类:实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。3. 构造函数:是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载4. 内联函数:,内联函数(有时称作在

8、线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(,从而节省了每次调用函数带来的额外时间开支。四、判断分析题(判断正误,将正确的划上“”,错误的划上“”,并简述理由。每小题3分,共12分)1. 空类就是没有名字的类。错。空类是没有任何成员的类2 引用类型和指针类型作为函数的形式参数时,对调用函数的实际参数的要求是一样的,均是地址。错3. 在派生类中,若基类的一个成员在派生类中也把相同名字定义为一个成员, 则不可调整它的访问。错。因为基类构造函数的调用顺序是按照派生类定义时

9、的顺序,而内嵌对象构造函数调用顺序应该按照成员在类中声明的顺序.两种都可以控制4. 对象数组在创建时要求构造函数不能有任何参数。错。静态数据成员是一个类的多个对象共享的五、读程序、得结果(每小题5分,共20分)1. #include <iostream.h> class A int a; public: void seta(int x)a=x; void showa()cout<<a<<endl; ; class B int b; public: void setb(int x)b=x; void showb()cout<<b<<en

10、dl; class C:public A, private B int c: public: void setc(int x,int y,int z)c=z;seta(x);setb(y); void showc()cout<<c<<endl;main() C c; c.seta(1); c.showa(); c.setc(1,2,3); c.showc(); 以上程序的执行结果是_3_。2. #include <iostream.h>class csample private: int i ; static int k;public: csample();

11、void display();csample:csample()i=0;k+;void csample:display()cout<<”i=”<<i<<”,k=”<<k<<endl;int csample:k=0;main() csample a,b;a.display();b.display();以上程序的执行结果是_i=0,k=2I=0,k=2_。_。3. #include <iostream.h>class sample int x;public:void setx(int i)x=i;int putx()retur

12、n x;main() sample *p;sample A3;A0.setx(5); A1.setx(6); A2.setx(7); for(int j=0;j<3;j+)p=&Aj;cout<<p->putx()<<” ”;cout<<endl;以上程序的执行结果是_567_。4. #include <iostream.h>static int dys =31,28,31,30,31,30,31,31,30,31,30,31;class dateint mo,da,yr;public:date(int m,int d,int

13、 y)mo=m,da=d;yr=y; date()void disp()cout<<mo<<”/”<<da<<”/”<<yr<<endl;date operator+(int day) date dt=*this;day+=dt.da;while(day>dysdt.mo-1) day-=daysdt.mo-1; if(+dt.mo=13)dt.mo=1;dt.yr+;dt.da=day;return dt; ;main() date d1(2,10,2001),d2;d2=d1+20;d2.disp( );以上程序

14、的执行结果是_3/2/2001_。六、编程题(每小题15分,共30分)1. 用模板设计一个堆栈类,包含判栈、读栈、入栈和出栈功能,要求用成员函数重载“()”实现判栈功能,用友元函数重载“-”实现出栈功能。重载“-”为出栈?“<<”?判栈有判空和判满。#include<iostream>using namespace std;template <class T>class Stack private: int size; int top; T *space; public: Stack(int n); Stack() delete space; void pu

15、sh( T t); friend ostream& operator<<(ostream& out,Stack &st) while(!(st.operator()() out<< st.spacest.top+<<endl; return out; bool operator ()() const return top = size; bool Isfull() const return top = 0; ;template <class T>Stack<T>:Stack(int size) this->

16、;size = size; top = size; space = new T size;template <class T>void Stack<T>:push(T t) if(!Isfull() space-top = t;int main() Stack<int>s(20);/可以指定栈的大小 s.push(1); s.push(2); s.push(3); s.push(4); s.push(5); s.push(6); cout<<s;这个没问题,如果是重载 - 改为:#include<iostream>using name

17、space std;template <class T>class Stack private: int size; int top; T *space; public: Stack(int n); Stack() delete space; void push( T t); friend Stack & operator -(Stack &st) while(!(st.operator()() cout<< st.spacest.top+<<endl; bool operator ()() const return top = size;

18、bool Isfull() const return top = 0; ;template <class T>Stack<T>:Stack(int size) this->size = size; top = size; space = new T size;template <class T>void Stack<T>:push(T t) if(!Isfull() space-top = t;int main() Stack<int>s(20);/可以指定栈的大小 s.push(1); s.push(2); s.push(3)

19、; s.push(4); s.push(5); s.push(6); -s;但是这个在VC下不行,在codeblocks下使用mingw32-g+.exe可以正常编译执行,运行截图: 请参考2. 利用基类、派生类和虚函数的概念编写一个程序计算三角形、矩形和圆形的面积。#include <iostream>const double PI = 3.1415926;using namespace std;struct Point Point() x = y = 0; Point(double X, double Y) :x(X), y(Y); double x; double y;cla

20、ss shape public: virtual double GetArea()=0; / 虚函数,纯虚函数,图形不具体的话,无法求面积 virtual void Print()=0; / 虚函数,纯虚函数,图形不具体的话,无法输出面积;/ 三角形类,继承自图形类class trigon : public shape public: trigon(Point &A, Point &B, Point &C) : a(A), b(B), c(C); trigon(); double GetArea() / 自己找公式吧,根据三点计算面积的 area = 0; return

21、 area; void Print() cout << "三角形【(" << a.x << "," << a.y << "):(" << b.x << "," << b.y << "):(" << c.x << "," << c.y << ")】的面积是:" << GetArea() <

22、;< endl; private: trigon(); Point a, b, c; / 三角形三个点 double area; / 面积;/ 矩形类,继承自图形类class rect : public shape public: rect(double &Top, double &Bottom, double &Left, double &Right) : top(Top), bottom(Bottom), left(Left), right(Right) / 填充四个点的坐标 pa.x = Left; pa.y = Top; pb.x = Left;

23、pb.y = Bottom; pc.x = Right; pc.y = Top; pd.x = Right; pd.y = Bottom; ; rect(); double GetArea() / 计算矩形面积 / return (right - left) * (bottom - top); void Print() cout << "矩形【(" << pa.x << "," << pa.y << "):(" << pb.x << ",&q

24、uot; << pb.y << "):(" << pc.x << "," << pc.y << "):(" << pd.x << "," << pd.y << ")】的面积是:" << GetArea() << endl; private: rect(); Point pa, pb, pc, pd; / 矩形左上、左下、右上、右下四个点坐标 double top, bottom, left, right; / 矩形上下左右四个线的坐标线 double area; / 面积;/ 圆形类,继承自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论