面向对象程序设计C++实验报告.docx

上传人:h**** 文档编号:26960628 上传时间:2022-07-20 格式:DOCX 页数:12 大小:15.38KB
返回 下载 相关 举报
面向对象程序设计C++实验报告.docx_第1页
第1页 / 共12页
面向对象程序设计C++实验报告.docx_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《面向对象程序设计C++实验报告.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++实验报告.docx(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、面向对象程序设计C+实验报告 电子科技大学信息与软件工程学院标准实验报告(实验)课程名称:面向对象程序设计C+ 电子科技大学教务处制表 学生姓名:赵天豪学号:2022220902022 指导教师:李巧勤实验地点:信软学院实验室实验时间:15/12/21 一、实验室名称:信软学院软件实验室 二、实验项目名称:基于MFC的C+桌面应用开发 三、实验学时:16学时 四、实验原理: 本次实验基于MFC开发C+桌面应用程序,实现可视化操作。 五、实验目的: 充分运用所学的C+的数据封装、继承与派生、多态等全部核心内容,补充完整一个基于MFC的应用,使学生能够基本掌握OOA、OOD方法;熟练掌握OOP方法

2、;初步了解基于Windows平台的桌面图形化应用的开发过程,掌握编程工具的使用;初步掌握建模工具的使用;基本掌握阅读、调试程序的能力。六、实验内容: 一位小学教师Ken希望完成这样的任务:针对于小学生正在学习四边形(quadrangle)的特性,编写一个小软件,能够随机在屏幕上显示矩形(rectangle)、正方形(square)、平行四边形(parallelogram)、梯形(trapezoid)和菱形(diamond)五种形体之一,同时显示该形体的特性和关键数据(随机产生),学生复习形体的特性,然后根据给出的关键数据计算形体的面积,软件判断其结果的正确性。在学习过程中,软件记录产生的每一个

3、形体,在学生选择不再继续后,将其学习的过程重放一遍,用以重温,加深印象。 根据上述描述,需要完成: 1)必做内容 根据Ken老师的要求,需要至少编写六个类: Rect /注意:类名不要使用Rectangle Square Parallelogram Trapezoid Diamond List (注:这六个类必须以上述名字命名) 其中,前五个类用于描述五种形体。五种形体不用顶点坐标的表示形式,而只是简单地用它们的特征值表示。例如:矩形、平行四边形用长和高表示;正方形用边长表示;梯形用两条平行边长和高表示;菱形用两条对象线长表示。要求为这五种形体编写相应的类,每个类的设计要求如下: (1)Qua

4、drangle类必须成为抽象类,是其它形体类的祖先。它拥有如下成员: draw 函数是 what 函数可选 (2)其它形体类之间的继承关系请自行拟定。其中,Parallelogram类必须拥有如下虚成员: Width(); /返回宽 Height(); /返回高 (3)每个形体类必须完成如下操作: 1设置标志名属性name。五种形体的标志名必须是Parallelogram、 Rectangle、Diamond、Trapezoid和Square之一(第一个字母大写, 其余小写); 2重载area()成员; 3重载draw()成员; 4重载Width()成员以返回宽; 5重载Height()成员以

5、返回高; 6提供Width2()成员以返回第二条平行边长(仅对梯形) (4)List类必须拥有如下成员函数: size();/返回列表中的节点数 push_back();/将数据添加到列表末尾 operator;/返回指定下标的数据 traverse();/遍历,需要一个访问函数作为参数 pop_back() /用来删除列表的最后一个节点,其原型为: void pop_back(); (5)重温过程实际上就是遍历List类对象的过程。 2)选作内容 List类实际上是一种称为“容器”的类。除了容纳形体指针,其实它还可以容纳任何类型的对象。在本选作内容中, (1)请将List类改为模板类,使其能

6、容纳任何类型的对象; (2)请为List类编写迭代器。要求如下: 该迭代器的类名为Iterator; 该迭代器必须重载如下运算符: +:迭代器后移 !=:两个迭代器比较 *:返回迭代器指向节点的数据域中的值,即quad指针。 =:两个迭代器的复制 +。该运算符函数的原型为: Iterator operator+(int i); 其功能为:假设当前迭代器(的内部指针)指向了第k个节点(从0开始计数),那么+运算符返回一个迭代器,该迭代器是在当前迭代器的基础上向后移动i个位置得到的,即该迭代器指向了第k+i个节点。例如: Iterator itr = list.begin() + 5; 那么迭代器

7、itr就指向了从列表的头节点往后数第5个结点。 为Iterator类编写begin()和end()成员。 七、实验器材(设备、元器件): PC计算机、Windows 系列操作系统、Visual Studio2022软件 八、实验步骤: 1)完成类的设计; 2)根据设计结果编写各种形体类的代码;完成学习模式的编程与测试 3)完成List类的编码与测试; 4)完善程序流程,实现复习模式; 5)对前面完成的所有文件进行整合,生成一个解决方案,并进行调试; 6)程序优化。 九、实验程序及结果分析: Canvas.h: #pragma once #includequad.h class Quadrang

8、le; / Canvas 视图 class Canvas : public CScrollView DECLARE_DYNCREATE(Canvas) /protected: public: Canvas(); / 动态创建所使用的受保护的构造函数 virtual Canvas(); public: #ifdef _DEBUG virtual void AssertValid() const; #ifndef _WIN32_WCE virtual void Dump(CDumpContext& dc) const; #endif #endif protected: virtual void O

9、nDraw(CDC* pDC); / 重写以绘制该视图 virtual void OnInitialUpdate(); / 构造后的第一次 DECLARE_MESSAGE_MAP() public: static Canvas * pCanvas; static void drawQuad(const Quadrangle *quad); static bool isLearning; bool toggleMode(void); double area; private: enum _QUAD_ para = 0, rect, sqr, diam, trap ; typedef pair K

10、V; map quadMap; ; Diam: #pragma once #include #include #includeCanvas.h #includepara.h using namespace std; class Diamond : public Para public: Diamond(int d1 = 4, int d2 = 8, string nm = Diamond) :Para(d1,d2,nm); Diamond(); void draw() const Para:draw(); ; double area() const return (double)width*h

11、eight/2; ; string what() const return name; ; int& Width1() return d1; ; int& Width2() return d2; ; friend ostream&operatorpush_back(p-data); p = p-next; len = 0; /复制构造函数 List() Node *p = head, *q; while (p != NULL) q = p; p = p-next; delete q; ; Node *Tail() return tail; /size_t size() return len;

12、; /获取链表的长度 size_t List:size() Node *p = head; size_t i = 0; while (p != NULL) p = p-next; +i; return i; void push_back(const QUADPTR quad) /尾部添加 Node *p = new Node(quad); p-next = NULL; if (tail = NULL) head = tail = p; else tail-next = p; tail = p; len+; int pop_back() if(len = 0) return len; Node

13、*c = head; if (c = tail) delete c; head = tail = NULL; else while (c-next != tail) c+; delete tail; tail = c; tail-next = NULL; len-; return len; void traverse(void(*f)(const QUADPTR&) Node *p = head; int i = 1; while (p != NULL) cout data); p = p-next; /请自行添加指针移动部分 /遍历 List& operator=(const List& l

14、) head = tail = NULL; Node *p = l.head; while (p != NULL) this-push_back(p-data); p = p-next; len = 0; return *this; List& operator+=(const QUADPTR& data) Node *p = new Node(data); p-next = NULL; if (tail = NULL) head = tail = p; else tail-next = p; tail = p; len+; return *this; QUADPTR& operator(size_t n) Node *p = head; for (size_t i = 1; i next; return p-data; ;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 策划方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com