华中科技大学C++实验总结报告(图形编辑器)_c文本编辑器实验报告

2020-02-27 其他工作总结 下载本文

华中科技大学C++实验总结报告(图形编辑器)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c文本编辑器实验报告”。

C++ 实验总结报告

研究课题:图形编辑器 学 校:华中科技大学 院 系: 班 级: 姓 名: 指导老师:

一、实验目的1.熟悉C++的一些重要性质,利用封装、继承、虚函数和多态性等特性,通过实验学习如何对各类图元的属性和方法进行合理的封装 2.学习Microsoft的Visual C++编程工具 3.掌握MFC的相关知识

4.掌握基本的文件保存、读取以及操作封装技术

二、实验目的设计一个简单的图形编辑器

三、实验所用仪器、设备

计算机:PentiumIII 800 以上

256M内存 操作系统:Windows 2000/XP 开发集成环境:Visual C++ 6.0

四、软件功能简介

(注:此软件是从网上下载得来)

该软件具有汉化的菜单界面(仿Windows自带画图软件),具有文件打开、编辑、保存等功能。编辑部分包括可以在编辑区域画直线、圆、矩形、曲线等矢量图形,可插入文字,可以修改线条的线型、颜色等基本属性。

五、部分代码分析

1.直线类代码:

cla CCreateLine : public CCommand { private: Position m_begin;// 直线的起点

Position m_end;// 直线的终点

public: CCreateLine();~CCreateLine();

int GetType();int OnLButtonDown(UINT nFlags, const Position& pos);int OnMouseMove(UINT nFlags, const Position& pos);int OnRButtonDown(UINT nFlags, const Position& pos);

int Cancel();};学习C++我们最需要理解的就是它面向对象的设计思想。这种思想可以在类和对象上得到充分的体现。

类是面向对象程序设计的核心,它实际上是由用户定义的一种新的复杂数据类型。它是通过抽象数据类型ADT方法来实现的一种数据类型,将不同类型的数据和与这些数据相关的操作封装在一起形成一个集合体。因此,它具有更高的抽象性,实现了信息的隐藏和封装。

对象是某种类的一个实例,是类的具体体现。一个类可以有多个对象。

分析这一段代码,编程者将直线的起始点和终止点设置为私有成员,这样做就对整条直线实现了隐藏和保护,是面向对象中封装特性的一个具体体现;另外,此函数中还包含了构造函数与析构函数,构造函数完成对新对象的初始化工作,析构函数是构造函数的配对物,它实现与构造函数相反的功能。另外的几个成员函数名称形参返回值都与cla Ccommand 中的几个公有函数相同,而在cla Ccommand中,这几个函数都是虚函数,这是函数重载,也是多态性的具体体现。

由这段代码我们可以了解关于类和对象的一些知识,为我们进一步了解面向对象程序设计的思想精髓奠定了基础。

2.对构造函数和解析函数的分析

构造函数

CCreateLine::CCreateLine(): m_begin(0,0), m_end(0,0){

m_nStep = 0;// 初始化操作步为 0 }

此构造函数用初始化列表的方式对直线类的私有成员进行初始化,同时记下操作步m_nStep是直线类从指令类中继承来的成员,它在指令类中属于保护成员,在直线类中则成为私有成员。这是数据共享与数据保护两者兼顾时的一种处理方法。

析构函数

CCreateLine::~CCreateLine(){ }

此析构函数中没有任何操作语句,但它并非没有任何操作。在任何一个对象消失时都要调用本类的析构函数进行扫尾工作。在构造对象时,构造函数分配资源给程序,在对象作用结束后,这些资源的释放就要靠析构函数。当然析构函数中也是可以有语句的,当需要在对象消失之前执行某种操作时,可以把语句写在里边。

3.BOOL Cline::Pick(const Position&pos,const double pick_radius){ Position objPos=pos;BOX2D sourceBox,desBOX;GetBox(&sourceBox);desBox.min[0]=sourceBox.min[0]-pick_radius;desBox.min[1]=sourceBox.min[1]-pick_radius;desBox.max[0]=sourceBox.max[0]+pick_radius;desBox.max[1]=sourceBox.min[1]+pick_radius;if(!objPos.lslnBox(desBox))return FALSE;double angle=::GetAngleToXAxis(m_begin,m_end);Position dp =objPos-m_begin;Double dist = fabs(dp.x*cos(angle)+dp.y*sin(angle)-objPos.Distance(m_begin));if(dist

在阅读此函数的源代码过程中,我感觉到对类创建的合理划分对整个程序具有着十分重要的意义。正如上段代码,它的前提是对类进行了合理的划分,只有在对类进行了合理的划分后,我们才能更加高效地处理对象。所以,我感觉到在学习面向对象程序设计时,应当尤为注意类的创建与划分。

六、个人学习体会

在学习C++以前,我认为C++只是在C语言的基础上的一种延伸,认为只要学过C语言,就可以用C语言的那种设计思想来学习C++、设计C++程序。正是由于抱了这种错误的思想,使我在一开始学习C++的时候遇到了很大的困难,我没有办法体会面向对象的设计思想,我在学习这门课的时候老是想着实现这个函数功能的具体过程,而没太注意对象分类的重要性。

随着课程学习的深入,我感觉到了利用类和对象、继承、封装等一系列知识可以把我们程序中很多繁杂、重复的部分省略掉,还可以解决一些利用面向过程的设计思想无法解决的问题,我自己也试着编写一些小的C++程序,当然在这个过程中遇到了很多困难,其中调试带来的困难让我无法忘记,在调试程序的同时,我也总结出来了一些调试的小技巧,让我在C语言课程设计中也受用匪浅。

在学习这门课的过程中,我感受到了自己亲自动手编程序、调程序的重要性,我们要熟悉C++的语法、体会调试的思想,最好的一个手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。另外,我还感觉到一个好的程序编出来需要很多人的团结合作。我在检查自己编写的程序是否有BUG未被找出的时候,我会让我的同学作为一个程序使用者来找出未发现的BUG并提出改进意见,这让我们的工作更加高效。

很高兴能够了解到C++的神奇魅力和面向对象程序设计的独特思想,它为我今后的程序设计奠定了基础。感谢老师对我们的悉心教授!

《华中科技大学C++实验总结报告(图形编辑器).docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
华中科技大学C++实验总结报告(图形编辑器)
点击下载文档
相关专题 c文本编辑器实验报告 总结报告 编辑器 华中科技大学 c文本编辑器实验报告 总结报告 编辑器 华中科技大学
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文