ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:165.96KB ,
资源ID:2591809      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2591809.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++实验报告14150.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

C++实验报告14150.docx

1、C+实验报告14150面向对象的编程技术课程设计实验报告 (2012/2013学年 第一学期) 姓名:陈阳 学号:119074075 班级:计算机科学与技术113班 指导教师:胡增涛 2012 年 12 月 14 日1应用程序名称.32应用程序的设计目的及意义.33应用程序简介.3 设计目的.3 功能介绍.3 主要知识点.3 实验环境.44应用程序的设计.4 类层次图.4 程序实现思路.5 程序运行界面介绍.6五心得体会.7附录.8源代码.8一应用程序名称 水果工厂的实现二设计目的及意义 学会综合运用C教材中的基础理论知识,并学习专业编程中广为借鉴的一些经典的编程模式,联系具体事例,解决实际问

2、题,达到深入领会理论,分析解决实际问题,培养一定的编程实践能力的目的。三应用程序简介 设计目的 现模拟一个水果工厂:系统中有一个唯一的水果生产工厂,能生产成品水果产品,如苹果、橘子、梨、香蕉等等,生产工厂能根据用户的选择或要求生产指定的水果并提供给客户。 功能简介 系统中有一个水果工厂,能生产苹果(Apple)、橘子(Orange)、梨(Pear)三种水果。客户在界面的提示下选择自己想要的水果,这时系统中会创建一个唯一的生产工厂,生产出客户要求的水果并提供给客户。 主要知识点 一.Factory模式: 在面向对象系统设计中经常可以遇到以下的两类问题: 为了提高内聚(Cohesion)和松耦合(

3、Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ;的代码。这里带来两个问题: 1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就姑且不论不同程序员千奇百怪的个人偏好了),程序的扩展性和维护变得越来越困难。2)还有一种情况就是在父类中并不知道具体要实例化哪一个具体的子类。这里的意思为:假设我

4、们在类A中要使用到类B,B是一个抽象父类,在A中并不知道具体要实例化那一个B的子类,但是在类A的子类D中是可以知道的。在A中我们没有办法直接使用类似于new 的语句,因为根本就不知道是什么。以上两个问题也就引出了Factory模式的两个最重要的功能: 1)定义创建对象的接口,封装了对象的创建; 2)使得具体化类的工作延迟到了子类中。Factory设计模式结构图: 2.单例模式: 单例模式(Singleton Pattern)又称单件模式,单例模式保证一个类仅有一个实例,并提供一个访问的他的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化单对象,一个最好的办法就是,

5、让类自身负责保存他的唯一实例,这个类可以保证没有其他实例可以被创建并且他可以提供一个访问该实例的方法。单例模式设计式结构: Singleton-instance:Singleton+Singleton()+GetInstance()Singlenton类,定义了一个GetInstance操作,允许客户访问他的唯一实例,GetInstance是一个静态方法,主要负责创建自己的唯一实例。实验环境操作系统:Windows98,Windows XP, Windows 7 开发工具:Visual C+6.04应用程序的设计类层次图 Factory Fruit+CreatFruit(var:strin&)

6、:Fruit*+Factory()#Fruit()+plant():void+price():void+value():void+Fruit() ConcreteFactoryAppleOrangePear-instance:ConcreteFactory*#ConcreteFactory()+Instance():ConcreteFactory*+CreatFruit(var:strin&):Fruit*+ConcreteFactory()+plant():void+price():void+value():void+Apple()+plant():void+price():void+val

7、ue():void+Orange()+plant():void+price():void+value():void+Pear() 程序实现思路 第一步:创建抽象类Fruit类; 声明保护类成员:Fruit(); 声明公有成员纯虚函数:virtual void plant()=0; virtual void price()=0; virtual void value()=0; virtual Fruit()=0; 第二步:分别创建Fruit的派生类Apple,Orange,Pear; 第三步:实现Fruit类与Apple,Orange,Pear类; 分别实现各类的构造函数,析构函数,业务函数pl

8、ant()、value(),price(); 第四步:创建Factory类; 引用头文件string;构造函数声明为protected类; 声明公有纯虚函数:virtual Factory()=0; virtual Fruit*CreatFruit(string &var)=0; 第五步:创建Factory的派生类ConcreteFactory(单例模式); 第六步:实现Factory与ConcreteFactory类; 第七步:在main函数中测试类。程序运行界面介绍 在界面的提示下,输入需要的水果,工厂只生产apple,orange,pear三种。 若客户从输入端输入“apple”,则工厂

9、生产苹果,并传递给客户,在界面上显示苹果的营养价值和价格: 若客户从输入端输入“orange”,则工厂生产橘子,并传递给客户,在界面上显示橘子的营养价值和价格:若客户从输入端输入“pear”,则工厂生产梨,并传递给客户,在界面上显示梨的营养价值和价格:若客户选择了其他的水果,则输出“我们工厂不生产这种水果”五.心得体会 经过这次课程设计,让我发现了自己C+学习上的漏洞,学习到了很多东西,也锻炼了动手编程能力。 通过独立完成水果应用程序的设计与实现,让我体验了完成一项工程的基本步骤,首先,先了解工程要解决的实际问题,在水果工厂工程中,就是要模拟工厂生产客户所需要的水果。其次,在对工程分析后进行设

10、计,画出整体设计结构图,在设计过程中,要思考局部功能实现的方式。然后通过自己较扎实的编程基础,写出代码。 为了完成水果工厂应用程序,我通过老师的课件和从网上学习了工厂模式和单例模式,对设计模式有了一些了解,也体会到了设计模式对软件设计的用处,我以后要自主学习,尽量多掌握这些设计模式,我想这对以后的学习和工作都有很大的帮助。 此外,检查和巩固了我对本学期所学的知识。通过查阅课本、资料、实践,加强了对类以及指针的使用,巩固了相关知识。特别是虚基类,以前对于虚基类的使用不多,通过这次的实践,让我对其使用更加熟练。 在编程过程中,难免出现难题和错误,在不断解决所遇到的问题中,也提高了我的独立思考能力,

11、分析和解决问题的能力。通过自己的反复思考、修改调试代码,最后解决问题、运行成功,使我感觉到了很多的喜悦感与自豪感。 通过这次课程设计,使我认识到自己的的动手能力还有待提高,以及自己计算机技术掌握的不够全面。以后只有多加实践,理论知识与实践相结合,才能提高自己的编程能力。附录源代码/Fruit.hclass Fruitpublic: virtual Fruit()=0; virtual void plant()=0; virtual void price()=0; virtual void value()=0;protected: Fruit();class Apple:public Fruit

12、public: Apple(); Apple(); void plant(); void value(); void price(); class Orange:public Fruitpublic: Orange(); Orange(); void plant(); void value(); void price();class Pear:public Fruitpublic: Pear(); Pear(); void plant(); void value(); void price();/Fruit.cpp#includeFruit.h#include#includeusing nam

13、espace std;Fruit:Fruit()Fruit:Fruit()Apple:Apple() cout您选择的水果是苹果.endl;Apple:Apple() void Apple:plant() coutPlant Apple endl; void Apple:value() cout苹果味道酸甜适中,营养丰富,富含锌、钙、磷、铁、钾等微量元素endl;void Apple:price() cout苹果的价格是:4元/斤endl;Orange:Orange() cout您选择的水果是橘子.endl;Orange:Orange() void Orange:plant() coutPla

14、nt Orangeendl; void Orange:value() cout橘子色彩鲜艳、酸甜可口,富含蛋白质、有机酸、维生素以及钙、磷、镁、 钠等endl;void Orange:price() cout橘子的价格是:2元/斤endl;Pear:Pear() cout您选择的水果是梨.endl;Pear:Pear() void Pear:plant() coutPlant Pear endl; void Pear:value() cout梨子味甘微酸,性凉,具有生津止渴、益脾止泻、和胃降逆的功效endl;void Pear:price() cout梨的价格是:3.2元/斤endl;/Fac

15、tory.h#includeusing namespace std;class Fruit;class Factorypublic: virtual Factory()=0; virtual Fruit*CreatFruit(string &var)=0;protected: Factory();class ConcreteFactory:public Factorypublic: static ConcreteFactory* Instance(); ConcreteFactory(); Fruit* CreatFruit(string &var);protected: ConcreteFa

16、ctory();private: static ConcreteFactory* instance;/Factory.cpp#includeFactory.h#includeFruit.h#include#includeusing namespace std;ConcreteFactory* ConcreteFactory:instance=0;Factory:Factory()Factory:Factory()ConcreteFactory:ConcreteFactory() coutConstructor ConcreteFactoryendl;ConcreteFactory:Concre

17、teFactory() coutDestructor ConcreteFactoryendl;ConcreteFactory* ConcreteFactory:Instance() if(instance=0) instance=new ConcreteFactory(); return instance;Fruit* ConcreteFactory:CreatFruit(string &var) if(var=apple) return new Apple(); else if(var=orange) return new Orange(); else if(var=pear) return

18、 new Pear(); else return NULL;/main.cpp#includeFactory.h#includeFruit.h#include#includeusing namespace std;int main() string var; cout 欢迎来到水果工厂endl; cout-endl; cout请输入你要的水果:(apple,orange,pear)var; Factory *fac=ConcreteFactory:Instance(); Fruit *p=fac-CreatFruit(var); if(p) p-plant(); p-value(); p-price(); else cout我们不生产这种水果endl; delete p; delete fac; return 0;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2