《2022年面向对象程序设计 3.pdf》由会员分享,可在线阅读,更多相关《2022年面向对象程序设计 3.pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 / 13 系领导审批并签名A / B 卷广州大学 20072008 学年第 一 学期考试卷课程 面向对象程序设计考试形式(闭卷,考试)学院系专业班级学号姓名题次一二三四五六七八九十总分评卷人分数20 20 40 20 100 评分一、填空题( 20分)1、_是特殊的成员函数,在对象作用域结束时自动调用。2、友元关系是非传递的和_,除非特别声明,否则,通常情况下若F是 A的友元, A_F的友元。3、运算符函数既可以重载为_函数,也可以重载为友元函数。4、在具有继承关系的类层次结构中,构造函数的执行顺序是:_、_、。5、具有纯虚函数的类称为 _。6、 Windows 应用程序的主窗口一般都是_
2、类的派生类,而窗口函数则被封装到 _类中。7、 MFC是用消息映射表来实现消息与_之间的映射的,MFC通过精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 13 页2 / 13 _个宏来声明和实现消息映射表。8、 MFC 采用结构来实现数据和数据显示的分离。应用程序的数据是由文档类 _对象来存储和管理。9、 CPaintDC 是_类 中最 常 用 的派 生类 , 它 只能 使用在 _类 的OnDraw函数中。10、消息的消息响应函数的函数名为OnMouseMove。11、是供 Windows应用程序使用的特殊数据,它们驻留在硬盘上的可执行
3、文件中。常用的资源有、快捷键、图标、位图等。12、_就是指应用程序把数据对象以文件的形式写入永久性存储体后,应用程序还能从永久性存储体来读取它,并且可以依据该文件在内存中重新创建该对象的机制。二、简述题( 20 分,每题 5 分)(1)Windows应用程序的主函数有哪3 个主要任务 ? 什么是消息循环 ? (2)简述文档 / 视图结构中文档类和视图类的作用。并说明在文档/ 视精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 13 页3 / 13 图结构的应用程序中,视图类的对象是如何来获取文档类对象中的数据的。(3)应用程序的界面有哪三
4、种方式?分别说明该界面应用程序的外观。(4) 鼠标消息分为哪两类?它们之间有什么区别?三、阅读下列程序,写出执行结果。(40分,每题 5分) 1、#include class counter public : void setnum ( int i ) num = i 。 void shownum ( ) cout num t 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 13 页4 / 13 staticint num 。 。int counter : num = 1 。void main() int i 。for ( i =
5、0 。 i 5 。 i + ) counter:num += i 。cout counter:num t 。 coutendl 。 2、#include class A public: A()a=5。 void printa()coutA :a=aendl。 private: int a。 friend class B。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 13 页5 / 13 class B public: void display1(A t)t.a+ 。 coutdisplay1:a=t.aendl。 void displ
6、ay2(A t)t.a- 。 coutdisplay2:a=t.aendl。 。void main() A obj1。 B obj2。 obj1.printa()。 obj2.display1(obj1)。 obj2.display2(obj1)。 obj1.printa()。 3、#include template class base public: base(T i,T j)x=i 。 y=j。 T sum()return x+y。 private: T x,y。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 13 页6 / 13
7、 。void main( ) base obj2(3.3,5.5)。 coutobj2.sum()endl。 base obj1(3,5)。 coutobj1.sum()endl。 4、#include class Base public: void abc()coutBase classendl。 。 。class Derived1: public Base public: void abc()coutDerived1 classendl。 。class Derived2: public Base public: void abc()coutDerived2 classabc()。p=&ob
8、j2。 p-abc()。p=&obj3。 p-abc()。obj1.abc()。 obj2.abc()。 obj3.abc()。5、#include class parent_class int private1 , private2 。public : parent_class ( int p1 , int p2 ) private1 = p1。 private2 = p2。 int inc1 () return + private1。 int inc2 () return + private2 。 void display () cout private1= private1 , priv
9、ate2= private2 endl 。 。class derived_class : private parent_class int private3 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 13 页8 / 13 parent_class private4 。public : derived_class ( int p1 , int p2 , int p3 , int p4 , intp5 ): parent_class ( p1 , p2 ) , private4 ( p3 , p4 ) private3 = p5 。
10、 int inc1 ( ) return parent_class : inc1 ( ) 。 int inc3 ( ) return + private3 。 void display ( ) parent_class : display ( ) 。 private4.display ( ) 。 cout private3= private3 endl 。 。void main ( ) derived_class d1 ( 17 , 18 , 1 , 2 , -5 ) 。d1 . inc1 ( ) 。 d1 . display ( ) 。 6、#includeclass A public :
11、A(int n) i=n 。 cout “初始化 i 的值为 : ”get_i()n 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 13 页9 / 13 A() cout“释放 A 的对象。 ”n 。 int get_i () return i 。 private: int i 。 。class B:public A public: B(int n, int m): A(n)j=m。cout “ 初 始 化j的 值为: ” get_j()n 。 B()cout“释放 B 的对象。 ”n 。 int get_j() return j
12、 。 private: int j。void main() B obj(1,2) 。cout “创建了一个 B 的对象。值为: ” obj.get_i()“ ” obj.get_j()n。 7、#include class A public: virtual void act1()。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 13 页10 / 13 void act2() act1()。 。void A:act1()coutA:act1() called. endl 。 class B : public A public: void
13、 act1()。void B:act1()cout B:act1() called. endl。 void main() B b 。b.act2()。 8、指出下列程序中的错误,并说明理由class COMPLEX public: COMPLEX(double r=0, double i=0) 。 COMPLEX operator-(const COMPLEX & other) 。 COMPLEX operator=(const COMPLEX & other) 。private: double real=0, image=0 。void main() float x 。COMPLEX y(1
14、0,20), z(2,3), sum。sum= x-y。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 13 页11 / 13 sum=sum-z。sum-。 四、编程题:( 20 分,每题 10 分)1使用虚函数编程求球体和圆柱体的体积及表面积。由于球体和圆柱体都可以看作由圆继承而来,所以可以定义圆类circle 作为基类。在circle 类中定义一个数据成员 radius 和两个虚函数 area( ) 和 volume( ) 。由 circle 类派生 sphere 类和 column 类。在派生类中对虚函数area( ) 和 v
15、lume( ) 重新定义,分别求球体和圆柱体的体积及表面积。补充指定部分。#include const double PI=3.14 。class circle public: circle(double r)radius=r。 /补充此处protected: 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 13 页12 / 13 double radius。class sphere:public circle public: sphere(double r):circle(r) double area()return 4.0*PI*
16、radius*radius。 double volume() return 4.0*PI*radius*radius*radius/3.0 。 。class column: public circle / 补充此处。void main() int a,b,c。 circle *p。 cout输入球体半径 a。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 13 页13 / 13 sphere sobj(a) 。 p=&sobj。 cout球体的体积 = /补充此处 cout球体的表面积 /补充此处 cout输入圆柱体的半径 ,高bc。 column cobj(b,c)。 p=&cobj。 cout圆柱体的体积 =volume()endl。 cout圆柱体的表面积 =area()endl。 2使用成员函数或友员函数编程序重载运算符“+”,使该运算符能实现两个字符串的连接。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 13 页