.-
电子科技大学信息与软件工程学院
标
(实验)课程名称:面向对象程序设计
准 实 验 报 告
C++
电子科技大学教务处制表
.-
学生姓名:赵天豪 学 号:2014220902010 指导教师:李巧勤 实验地点:信软学院实验室 实验时间:15/12/21 一、实验室名称:信软学院软件实验室 二、实验项目名称: 基于MFC的C++桌面应用开发 三、实验学时:16学时 四、实验原理:
本次实验基于MFC开发C++桌面应用程序,实现可视化操作。
五、实验目的:
充分运用所学的C++的数据封装、继承与派生、多态等全部核心内容,补充完整一个基于MFC的应用,使学生能够基本掌握OOA、OOD方法;熟练掌握OOP方法;初步了解基于Windows平台的桌面图形化应用的开发过程,掌握编程工具的使用;初步掌握建模工具的使用;基本掌握阅读、调试程序的能力。
六、实验内容:
一位小学教师Ken希望完成这样的任务:针对于小学生正在学习四边形(quadrangle)的特性,编写一个小软件,能够随机在屏幕上显示矩形(rectangle)、正方形(square)、平行四边形(parallelogram)、梯形(trapezoid)和菱形(diamond)五种形体之一,同时显示该形体的特性和关键数据(随机产生),学生复习形体的特性,然后根据给出的关键数据计算形体的面积,软件判断其结果的正确性。在学习过程中,软件记录产生的每一个形体,在学生选择不再继续后,将其学习的过程重放一遍,用以重温,加深印象。
根据上述描述,需要完成: 1) 必做内容
根据Ken老师的要求,需要至少编写六个类: ? Rect //注意:类名不要使用Rectangle ? Square ? Parallelogram ? Trapezoid
.-
? Diamond ? List
(注:这六个类必须以上述名字命名)
其中,前五个类用于描述五种形体。五种形体不用顶点坐标的表示形式,而只是简单地用它们的特征值表示。例如:矩形、平行四边形用长和高表示;正方形用边长表示;梯形用两条平行边长和高表示;菱形用两条对象线长表示。要求为这五种形体编写相应的类,每个类的设计要求如下:
(1) Quadrangle类必须成为抽象类,是其它形体类的祖先。它拥有如下
成员:
成员 name area draw what
类型 数据 函数 函数 函数
是否纯虚 / 是 是 可选
(2) 其它形体类之间的继承关系请自行拟定。其中,Parallelogram类必
须拥有如下虚成员: ? Width(); //返回宽 ? Height(); //返回高
(3) 每个形体类必须完成如下操作:
[1] 设置标志名属性name。五种形体的标志名必须是Parallelogram、
Rectangle、Diamond、Trapezoid和Square之一(第一个字母大写,其余小写); [2] 重载area()成员; [3] 重载draw()成员;
[4] 重载Width()成员以返回宽; [5] 重载Height()成员以返回高;
[6] 提供Width2()成员以返回第二条平行边长(仅对梯形) (4) List类必须拥有如下成员函数:
? size();//返回列表中的节点数 ? push_back();//将数据添加到列表末尾 ? operator[];//返回指定下标的数据
.-
? traverse();//遍历,需要一个访问函数作为参数 ? pop_back() //用来删除列表的最后一个节点,其原型为: void pop_back();
(5) 重温过程实际上就是遍历List类对象的过程。 2) 选作内容
List类实际上是一种称为“容器”的类。除了容纳形体指针,其实它还可以容纳任何类型的对象。在本选作内容中,
(1) 请将List类改为模板类,使其能容纳任何类型的对象; (2) 请为List类编写迭代器。要求如下:
? 该迭代器的类名为Iterator; ? 该迭代器必须重载如下运算符: ? ++:迭代器后移 ? !=:两个迭代器比较
? *:返回迭代器指向节点的数据域中的值,即quad指针。 ? =:两个迭代器的复制 ? +。该运算符函数的原型为: Iterator operator+(int i);
其功能为:假设当前迭代器(的内部指针)指向了第k个节点(从0开始计数),那么+运算符返回一个迭代器,该迭代器是在当前迭代器的基础上向后移动i个位置得到的,即该迭代器指向了第k+i个节点。例如: Iterator itr = list.begin() + 5;
那么迭代器itr就指向了从列表的头节点往后数第5个结点。 为Iterator类编写begin()和end()成员。
七、实验器材(设备、元器件):
PC计算机、Windows 系列操作系统 、Visual Studio2013软件
八、实验步骤:
1)完成类的设计;
2)根据设计结果编写各种形体类的代码;完成学习模式的编程与测试
.-
3)完成List类的编码与测试; 4)完善程序流程,实现复习模式;
5)对前面完成的所有文件进行整合,生成一个解决方案,并进行调试; 6)程序优化。
九、实验程序及结果分析: Canvas.h:
#pragma once #include \
class Quadrangle;
// Canvas 视图
class Canvas : public CScrollView {
//protected: public: public: #ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const; #ifndef _WIN32_WCE #endif #endif
protected:
DECLARE_MESSAGE_MAP() static Canvas * pCanvas;
static void drawQuad(const Quadrangle *quad); static bool isLearning; public:
virtual void OnDraw(CDC* pDC); // 重写以绘制该视图 virtual void OnInitialUpdate(); // 构造后的第一次 Canvas(); // 动态创建所使用的受保护的构造函数 virtual ~Canvas(); DECLARE_DYNCREATE(Canvas)