2009-2010学年期末考试A.doc_第1页
2009-2010学年期末考试A.doc_第2页
2009-2010学年期末考试A.doc_第3页
2009-2010学年期末考试A.doc_第4页
2009-2010学年期末考试A.doc_第5页
全文预览已结束

下载本文档

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

文档简介

武汉大学20092010学年上学期面向对象的程序设计试卷(A)学号:姓名:院系:专业:得分:一、名词解释(每题5分,共计25分)(1)类 (2)多态 (3)抽象类 (4)文档模板 (5)序列化二、简答题(每题10分,共计40分)1. 简述文档、视图和应用程序框架之间如何相互作用?2. Windows消息的发送有哪两种方式?主要区别是什么?Windows API提供了哪几个函数用于消息的发送?3. 试简述const型变量与用#define宏定义的符号常量的差异。4. 简述Windows应用程序绘图过程。三、改错题(每题5分,共计10分)。1、根据左边的结构定义,找出右边程序的错误并修改正确。typedef struct tagWORKERlong int num;char* name;char sex;int age;Worker;void main()Worker a; a.Num = 187045; strcpy(, ZhangFun); a.sex = Man; a.age = 18; 2、下面两段程序的目的是在屏幕上输出“Hello!”,但是两段程序中都不能得到正确的运行结果,请简述其错误并改正。(5分)void GetMemory(char *p)p = new char100;void Test(void)char *str = NULL;GetMemory(str);strcpy(str, Hello!);printf(str);char* GetMemory(void)char p = Hello!;return p;void Test(void)char *str = NULL;str = GetMemory();printf(str);五、编程题(25分):下面的单文档应用程序用于在客户区内绘制矩形。程序运行后,当用户在客户区窗口按下鼠标左键并移动时,程序会在鼠标按下的起始位置和鼠标当前位置之间绘制矩形,当鼠标左键弹起时,记录矩形参数并在窗口中使用绿色的单像素线条绘出最终的矩形形状。请在题中画横线的地方添加相应的实现代码。1、下面是文档类CDrawRectDoc的类声明、构造函数、析构函数和成员函数AddRect。请在析构函数和成员函数AddRect中添加相应代码。class CDrawRectDoc : public CDocument protected: / create from serialization onlyCDrawRectDoc();DECLARE_DYNCREATE(CDrawRectDoc)/ Operationspublic:void AddRect(RECT& rect); / 添加新的矩形RECT* GetRectData()return m_pRectArray; / 获得矩形数组指针int GetRectNumber()return m_nRect; / 获得矩形数量.protected:RECT* m_pRectArray; / 矩阵数组int m_nRect; / 矩阵数量int m_nSize; / 矩阵数组的容量.;CDrawRectDoc:CDrawRectDoc()m_pRectArray = new RECT64;memset(m_pRectArray, 0, 64*sizeof(RECT);m_nRect = 0;m_nSize = 64;CDrawRectDoc:CDrawRectDoc()/ 请在下面添加“释放矩阵数组所占用的内存”的代码(2分)/ 成员函数:添加新的矩形void CDrawRectDoc:AddRect(RECT& rect)/ 请在函数体内添加实现代码(5分)2、下面是视图类CDrawRectView的类声明、消息响应函数OnLButtonDown、OnMouseMove和OnRButtonDown、以及绘图成员函数OnDraw,请在黑体注释后面添加相应的实现代码。class CDrawRectView : public CScrollViewprotected: / create from serialization onlyCDrawRectView();DECLARE_DYNCREATE(CDrawRectView)/ Attributespublic:CPoint m_ptOrigin; / 鼠标按下的位置,用于记录矩形左上角CPoint m_ptEnd; / 鼠标弹起的位置,用于记录矩形右下角BOOL m_bDragging; / 鼠标是否处于拖曳状态HCURSOR m_hCursor; / 鼠标形状.protected:void DrawRectangle(CDC* pDC, CPoint& ptStart, CPoint& ptEnd);/AFX_MSG(CDrawRectView)afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);/AFX_MSGDECLARE_MESSAGE_MAP();/ 视图类CDrawRectView的绘图函数void CDrawRectView:OnDraw(CDC* pDC)CDrawRectDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ 创建绿色单像素线条的画笔并设置到设备环境中,请在下面添加相应代码(3分)/ 选择空心画刷到设备环境中CBrush* pOldBrush = (CBrush *)pDC-SelectStockObject(HOLLOW_BRUSH);/ 获得记录的矩形数组和矩形数量,请在下面添加相应代码(2分)/ 绘制矩形,请在下面添加相应代码(3分)/ 恢复设备环境,请在下面添加相应代码(2分)void CDrawRectView:OnLButtonDown(UINT nFlags, CPoint point) SetCapture(); :SetCursor(m_hCursor);m_ptOrigin = m_ptEnd = point;m_bDragging = TRUE;CScrollView:OnLButtonDown(nFlags, point);void CDrawRectView:OnMouseMove(UINT nFlags, CPoint point) if (m_bDragging)CClientDC dc(this);DrawRectangle(&dc, m_ptOrigin, m_ptEnd);m_ptEnd = point;DrawRectangle(&dc, m_ptOrigin, m_ptEnd);CScrollView:OnMouseMove(nFlags, point);void CDrawRectView:OnLButtonUp(UINT nFlags, CPoint point) if (m_bDragging)/ 计算矩形左上角和左下角坐标,请在下面添加相应代码(3分)/ 添加矩形到数组,请在下面添加相应代码(3分)/ 绘图结束m_bDragging = FALSE;ReleaseCapture();/ 刷新当前视图的显示,请在下面添加相应代码(2分)CScrollView:OnLButtonUp(nFlags, point);void CDrawRectView:DrawRectangle(CDC* pDC, CPoint& ptStart, CPoint& ptEnd)CPen pen(PS_SOLID, 1, RGB(128, 128, 128);CPen* pOldPen = pDC-SelectObject(&pen);int op2 = pDC-SetROP2(R2_XORPEN);pDC-MoveTo(ptStart.x, ptStart.y);pDC-LineTo(ptEnd.x, p

温馨提示

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

评论

0/150

提交评论