面向对象程序设计含答案_第1页
面向对象程序设计含答案_第2页
面向对象程序设计含答案_第3页
面向对象程序设计含答案_第4页
免费预览已结束,剩余5页可下载查看

下载本文档

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

文档简介

1、一、填空题( 20 分)1、 _构造函数 _是特殊的成员函数,在创建和初始化对象时调用。2、 _静态成员 _是局部于类的成员,它提供一种同类对象的_共享 _机制。3、 运算符重载的作用是使运算符可以操作自定义的_类对象 _,但重载后运算符原有的 _基本语义 _不变。4、 派生类不能访问基类的 _私有 _成员,但可以访问基类的公有成员和_保护 _成员。5、 具有 _纯虚函数 _的类称为抽象类。6、Windows 应用程序是靠 _消息 _来驱动的,其主函数的主要任务是对窗口进行初始化工作和 _消息循环 _。7、MFC是用消息映射表来实现消息与_消息响应函数 _之间的映射的,MFC 通过 _4_个宏

2、来声明和实现消息映射表。8、在文档 /视图结构的框架中,视图类_CView_类的对象用来显示数据并接受用户操作。文档类 _CDocument_对象的作用是存储和管理数据。9、CPaintDC 是 _CDC_ 类 中 最 常 用 的 派 生 类 , 它 只 能 使 用 在 CView 类 的_OnDraw_函数中。10、 消息 WM_MOUSEMOVE 的消息响应函数的函数名为_OnMouseMove_。11、 资源是供 Windows 应用程序使用的特殊数据,它们驻留在硬盘上的_可执行文件 _中。常用的资源有菜单、快捷键、_图标 _、位图等。12、 内存中的对象可以以文件的形式存储在永久性存储

3、介质中,而当应用程序再把它从永久性存储介质读入后,该对象能恢复为原来的状态,则该对象称之为 _永(持)久性对象 _。二、简述题( 20 分,每题 5 分)( 1)简述构成文档 / 视图结构应用程序框架的 4 个 MFC派生类,并说出它们的功能。答 : 假如工程名称为 MyPrj ,则 MFC AppWizard 会自动创建以下 4 个派生类来构成应 用 程 序 的 框 架 :CFrame 类 的 派 生 类 CMmainFrame、 CWinApp 类 的 派 生 类CMyPrjApp、 CDocument 类的派生类CMyPrjDoc 和 CMyPrjView 。 其中, CMyPrjDoc

4、 类对象用来存储和管理应用程序中的数据;CMainFrame 对象与CMyPrjView 对象构成了1 / 9应用程序的界面,CMainFrame 对象只是CMyPrjView 对象的容器,而CMyPrjView 类的对象是用来显示文档与接收用户事件的;CMyPrjApp 类的对象是应用程序的全局对象;它是应用程序中对象的容器;负责创建应用程序界面和消息循环。( 2 )为什么拆分窗口的显示更新必须要同步?文档类的成员函数Update AllViews 的作用是什么?答 : 因为应用程序的所有拆分窗口显示的应该是同一个文档,所以当文档发生变化时,该文档所对应的窗口当然要同时更新显示以正确地反映文

5、档的内容。文档类的成员函数 Update All Views 的作用是通知文档所对应的所有窗口同时进行重绘。( 3)怎样才能使控件成为窗口的子窗口并且在窗口中可见?按钮控件能创造哪三种不同的形式?答:为了使控件成为窗口的子窗口并且在窗口中可见,两个控制样式的常数使所有控件都必须使用的,一个是WS_CHILD,另一个是WS_VISIBLE,前者使控件成为应用程序的子窗口,后者使控件可见。在使用多个常数制定控件样式时,应该用符号"|"将其进行连接。按钮控件能创造以下三种不同的形式:下压按钮、复选框、和单选按钮。(4) 如何把绘图工具载入设备描述环境进行绘画?请以画笔为例写出执行

6、步骤。答: (1)创建画笔:CPen newPen(style,width,color)。(2)把画笔载入DC: CPen *oldPen=pDC->SelectObject(&newPen)。(3) 按要求进行绘画( 4)恢复旧画笔 pDC->SelectObject(oldPen) 。三、阅读下列程序,写出执行结果。(40 分,每题 5 分)1、 #include<iostream.h>class Abcpublic:Abc( )a=0 。 b=0。 c=0。 Abc(int i,int j,int k)a=i。 b=j 。 c=k 。void get(in

7、t&i,int&j,int&k)i=a。 j=b 。 k=c。 Abc operator * (Abc obj)。private:int a,b,c。 。AbcAbc:operator * (Abc obj)Abc tempobj 。tempobj.a=a*obj.a 。tempobj.b=b*obj.b 。tempobj.c=c*obj.c 。return tempobj 。2 / 9void main() Abc obj1(1,2,3),obj2(5,5,5),obj3 。 int a,b,c。obj3=obj1*obj2 。 obj3.get(a,b,c) 。co

8、ut<< ”(obj1*obj2):t ”<< ”a=”<<a<< t<< ”b=”<<b<< t<< ”c=”<<c<< t<<endl 。(obj2 * obj3).get(a,b,c) 。cout<< ”(obj2*obj3):t ”<< ”a=”<<a<< t<< ”b=”<<b<< t<< ”c=”<<c<< t<<endl

9、 。运行结果:(obj1*obj2): a=5b=10c=15(obj2*obj3): a=25b=50c=752、 #include <iostream.h>class BASE1public:BASE1(int i)cout<<”调用基类 BASE1 的构造函数 :”<<i<<endl 。 。class BASE2public:BASE2(int j)cout<<”调用基类 BASE2 的构造函数 :”<<j<<endl 。 。class A: public BASE1, public BASE2publi

10、c:A(int a,int b,int c,int d): BASE2(b), BASE1(c), b2(a),b1(d) cout<< ”调用派生类 A 的构造函数。 ”<<a+b+c+d<<endl 。 private:BASE1 b1 。BASE2 b2 。 。void main( )A ojb(11,22,33,44) 。 运行结果:调用基类 Base1 的构造函数: 33调用基类 Base2 的构造函数: 22调用基类 Base1 的构造函数: 44调用基类 Base1 的构造函数: 11调用派生类A 的构造函数:1103、 #include &l

11、t;iostream.h>3 / 9template <typename T>void fun(T&x,T&y)T temp 。temp=x 。 x=y 。 y=temp。void fun(double x, int y)double temp 。temp=x 。 x=y 。 y=temp 。void main( )int i,j 。i=30 。 j=10 。fun(i,j) 。cout<< ”i=”<<i<< t<<”j= ”<<j<<endl 。double a,b。a=1.23。b=

12、3.21 。fun(a,b) 。cout<< ”a=”<<a<< t<<”b=”<<b<<endl 。double m=10 。 int n=30 。fun(m,n) 。cout<< ”m=”<<m<< t<<”n=”<<n<<endl 。运行结果:i=10j=30a=3.21 b=1.23m=10n=304、 #include <iostream.h>void main( )double x=123.456 。cout.width(10)

13、 。cout.setf(ios:dec,ios:basefield) 。cout<<x<<endl 。cout.setf(ios:left) 。cout<<x<<endl 。cout.width(15) 。cout.setf(ios:right,ios:left) 。cout<<x<<endl 。cout.setf(ios:showpos) 。cout<<x<<endl 。4 / 9cout<<-x<<endl 。cout.setf(ios:scientific) 。cout

14、<<x<<endl 。 运行结果:123.456 123.456123.456+123.456-123.456+1.234560e+0025、 #include <iostream.h>enum BREED GOLDEN, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB 。class Mammalpublic:/ constructorsMammal():itsAge(2), itsWeight(5)Mammal()/accessorsint GetAge() const return itsAge 。 void SetAge(

15、int age) itsAge = age 。 int GetWeight() const return itsWeight。 void SetWeight(int weight) itsWeight = weight。 /Other methodsvoid Speak()const cout << "Mammal sound!n"。 void Sleep()const cout << "shhh. I'm sleeping.n" 。 protected:int itsAge 。int itsWeight 。 。class

16、 Dog : public Mammalpublic:/ Constructors Dog():itsBreed(GOLDEN) Dog()/ AccessorsBREED GetBreed() const return itsBreed 。 void SetBreed(BREED breed) itsBreed = breed 。 / Other methodsvoid WagTail() const cout << "Tail wagging.n"。 void BegForFood() const cout << "Begging fo

17、r food.n" 。 private:BREED itsBreed 。 。5 / 9int main()Dog fido 。fido.Speak() 。fido.WagTail() 。cout << "Fido is " << fido.GetAge() << " years oldn"。return 0。运行结果: Mammal sound!Tail waggingFido is 2 years old6、 #include<iostream.h>class Basepublic: void

18、who()cout<<”Base class”<<endl 。 。class Derived1: public Basepublic: void who()cout<<”Derived1 class ”<<endl。 。class derived2: public Basepublic: void who()cout<<”Derived2 class ”<<endl。Void main()base obj1, *p 。 derived1 obj2 。 derived2 obj3 。P=&obj1 。 p->w

19、ho() 。P=&obj2 。 p->who() 。P=&obj3 。 p->who() 。Obj1.who() 。 Obj2.who() 。 Obj3.who() 。结果: base classBase classBase classBase classDerived1 classDerived2 class7、 #include<iostream.h>class example private:int date。static int count。public:example(int y=10):date(y) cout<<” date=

20、”<<date<<endl 。Count+ 。 6 / 9static int display()return count。 。int example:count=0。void main()example e1 。 example e2(20)。cout<<e1.Display()<<endl。cout<<e2.Display()<<endl。cout<<example:Display()<<endl。运行结果: Date=10Date=202228、指出下列程序中的错误,并说明理由#include

21、<iostream.h>class Student public:void Student()。/ 构造函数有返回类型错,函数后面多分号void Display()cin>>name>>number 。 cout<< 姓名 <<name<<学号 <<number<<endl 。 /字符串缺少双引号private: char *name=noname。 /数据成员不能赋值int number=0。/ 数据成员不能赋值 。四、编程题:( 20 分,每题 10 分)1、 编写一个程序,实现小型公司的工资管

22、理。该公司主要有4 类人员:经理、兼职技术人员、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:经理拿固定月薪8000 元,兼职技术人员按每小时100 元领取月薪,销售员按当月销售额的4%提成,销售经理既拿固定月工资又拿销售提成,固定月工资为5000 元,销售提成为所管部门当月销售总额的0.5% 。要求补充未完成的代码,使其成为一个完整的程序。#include <iostream.h>class Employeepublic:employee()cout<< ”职工编号、姓名”。 cin>>no>&g

23、t;name 。 salary=0。 void Pay()void Display()Protected:Int no 。 char name10 。 float salary 。 。Class technician: public Employee/ 派生技术人员 public:Technician() hourlyrate=100.0。 7 / 9void Pay()cout<<name<< ”本月工作时数:”cin>>workhours 。salary=hourlyrate*workhours 。void Display()cout<< ”

24、兼 职 技 术 人 员 ”<<name<< ”( 编 号 为 ”<<no<< ”)”本 月 工资: ”<<salary<<endl 。 private:/ 补充下面内容float hourlyrateint workhours 。 ;Class Saleman: public Employee/ 派生销售员类 public: Salesman() commrate=0.04f。 / 销售提成比例void Pay() cout<<name<< ”本月销售额:”。/补充下面内容cin>>sa

25、les。 salary=sales*commrate 。 void Display()cout<< ”销售员 ”<<name<<”(编号为 ”<<no<< ”)”本月工资: ”<<salary<<endl 。 Protected:Float commrate 。 sales。 ;Class Manager: virtual public Employee public: Manager()monthlypay=8000 。/ 补充函数体内容Void Pay() salary=monthlypay 。 / 补充函数体内容void Dis

温馨提示

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

最新文档

评论

0/150

提交评论