




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+C+实例实例王雪晶例1:单词和词典类n建立一个由单词及其含义组成的类Definition(每个单词最多有10条含义),并使用该类的对象实现单词及其含义的输入输出。n建立一个词典,词典由一个一个单词组成,故Dictionary类中包含了Definition类的对象数组(可存放100个单词)Definitionword: char *meaningsMAXMEANS: char*nMeanings: intDefinition()Definition(char * word, char * def)operator=(Definition& def): Definition&
2、PutWord(char *s): void GetWord(): char * AddMeaning(char *s): void GetMeaning(int level): char * GetnMeans(): intprint(): voidDefinition()单词类class Definitionpublic:Definition() Definition(char * word, char * def)Definition & operator=(Definition& def)void PutWord(char *s)char * GetWord() ret
3、urn word;void AddMeaning(char *s)char * GetMeaning(int level) return nMeanings;int GetnMeans()void print()Definition()private:char * wordchar * meaningsMAXMEANSint nMeaningsDefiniton:Definition(char * w, char* def)int n=strlen(w)+1;word = new charn;strcpy(word,w);nMeanings = 0;for(; defnMeanings&
4、;nMeanings!=MAXMEANS; nMeanings+)meaningnMeanings = new charstrlen(defnMeanings)+1;strcpy(meaningsnMeanings, defnMeannings);Definiton& Definition:operator = ( Definition& def)int n=strlen(def.word)+1;word = new charn;strcpy(word,def.word);nMeanings = def.nMeanings;for(int i=0; inMeanings; i+
5、)meaningi = new charstrlen(def.meaningsi)+1;strcpy(meaningsi, def.meanningsi); Definition: Definition()delete word;for(int i=0; inMeanings; i+) delete meaningsi;void Definition: PutWord(char *s)int n=strlen(s)+1;word = new charn;nMeanings = 0;void Definition: AddMeaning(char *s)if ( nMeaningsMAXMEAN
6、S)meaningi = new charstrlen(s)+1;strcpy(meaningsnMeanings+, s);char * Definiton:GetMeaning(int level)if (0= level & level nMeanings)return meaningslevel;elsereturn NULL;void Definition: print()cout endlword“:n”;for (int i=0; inMeanings; i+)cout “ ”meaningsiendl;DictionarynWord: long maxWords: lo
7、ngword: Definition* Dictionary (int n=100)FindWord (char * s): longAddWord (Definition& word): voidGetDef (char* word, char* def): intPrint (char *): voidDictionary()词典类Dictionary:Dictionary (int n)nWords = 0;maxWords = n;words = new Definitionn;Dictionary:Dictionary ()deletewords;long Dictionar
8、y:FindWord (char *s)for(int i=0; inWords; i+)if(strcmp(wordsi.Getword(), s)=0)return i;return -1;void Dictionary:AddWord (Definition& word)if (nWordsmaxWords)wordsnWords=word;+nWords;int Dictionary:GetDef (char *word, char* def)int nM=0;int wordIdx = FindWord(word);if (wordIdx!= -1) nM=wordsword
9、Idx.GetnMeans();for(int i=0; inM; i+) char * pMeaning = wordswordIdx.GetMeaning(i); int length = strlen(pMeaning); delete defi; defi = new charlength+1; strcpy(defi, pMeaning);void Dictionary:print (char * w)int wordIdx = FindWord(w);if (wordIdx!= -1)wordswordIdx.print();elsecout“couldnt find”wendl;
10、void main()Dictionary d(5); char * word1=“class”;char * indef1=“班级班级”,“类类”,“阶级阶级”,“课课”,“等等级级”,0;char * word2=“object”;char * indef2=“目的目的”,“对象对象”,“物体物体”,“宾语宾语”,“客观客观”,0;char * word3=“snow”;char * indef3=“雪雪”,“雪花效应雪花效应”,0;Definition def1(word1, indef1);Definition def2(word2, indef2);Definition def3(w
11、ord3, indef3);d.AddWord(def1);d.AddWord(def2);d.AddWord(def3);d.Print(word1);d.Print(word2);d.Print(word3);例2:链表n建立链表项Itemn一个数据项datan一个指针*next例2:链表n有关链表操作的类Listn显示输出一个已生成的链表;n对一个空表插入链表项,插入项放在表头;n对一个空表追加链表向,追加项放在表尾;n两个链表相连接;n将一个链表的各链表项逆向输出;n求得一个链表的数据项数。#include using namespace std;class List;class It
12、empublic:friend class List;private:Item(int d=0) data=d; next=0;Item * next;int data;class Listpublic:List() list=0;List(int d) list=new Item(d);int print();int insert(int d=0);int append(int d=0);void cat(List & il);void reverse();int length();private:Item * end();Item * list;int List:print()if
13、 (list = 0) cout“emptyn”;return 0;cout“(”;int cnt=0;Item *pt=list;while(pt)if(+cnt%40 = 1 & cnt!=1)coutendl;coutdatanext;coutnext=list;list = pt;return d;int List:append(int d)Item *pt = new Item(d);if(list = 0)list = pt;else(end()-next=pt;return d;Item * List:end( )Item *prv, *pt;for( prv=pt=li
14、st; pt; prv=pt, pt=pt-next);return prv;void List:cat( List& il)Item *pt=il.list;while( pt)append(pt-data);pt=pt-next;void List:reverse()Item *pt,*prv,*tmp;prv=0;pt=list;list=end();while(pt!=list)tmp=pt-next;pt-next=prv;prv=pt;pt=tmp;list-next=prv;int List:length()int cnt=0;Item *pt=list;for( ; p
15、t; pt=pt-next,cnt+);return cnt;void main()List list1;list1.print();for(int i=10;i18; i+)list1.insert(i);cout“list1: ”;list1.print();List list2;for(i=15;i20;i+)list2.append(i);cout“list2: ”;list2.print();cout“list1 length: ”list1.length()endl;list2.cat(list1);cout“list2: ”;list2.print();list2.reverse
16、();cout“list2: ”;list2.print();cout“list2 length: ”list2.length()endl;例3:虚函数例子n计算不同几何形状的面积和体积n类层次结构如下:containercubespherecylinder#includeclass containerprotected:double radius;public:container(double radius)container:radius=radius;virtual double surface_area()=0;virtual double volume()=0;class cube:
17、public containerpublic:cube(double radius):container(radius);double surface_area()return radius*radius*6;double volume()return radius*radius*radius;class sphere:public containerpublic:sphere(double radius):container(radius);double surface_area()return 4*3.1416*radius*radius;double volume()return 3.1
18、416*radius*radius*radius*4/3;class cylinder:public containerdouble height;public:cylinder(double radius,double height):container(radius)cylinder:height=height;double surface_area()return 2*3.1416*radius*(height+radius);double volume()return 3.1416*radius*radius*height;void main()container *p;cube ob
19、j1(10);sphere obj2(6);cylinder obj3(4,5);p=&obj1;cout输出结果:输出结果:endl;cout正方体表面积:正方体表面积:surface_area()endl;cout正方体体积:正方体体积:volume()endl;p=&obj2;cout球体表面积:球体表面积:surface_area()endl;cout球体体积:球体体积:volume()endl;p=&obj1;p=&obj3;cout圆柱体表面积:圆柱体表面积:surface_area()endl;cout圆柱体体积:圆柱体体积:volume()pro
20、mpt(); / alert user/ .int i = pb-get_value();if (pb-was_changed() / new value; do something else / old value was fine/ . Ival_box类的使用void some_fct()Ival_box* p1 = new Ival_slider(0,5); interact(p1);Ival_box* p2 = new Ival_dial(1,12);interact(p2);一个传统的层次结构问题:从哪获取图形要素?大部分图形用户界面系统都提供了一个类,其中定义了屏幕实体的基本性质
21、。图示:BBWindowIval_boxIval_sliderIval_dialPopup_ival_sliderFlashing_ival_slider一个传统的层次结构存在问题:1. 版本问题,不同用户界面系统的Ival_box共存。2. 每个派生类都共享着在Ival_box里声明的基本数据。3. 类BBwindow的修改将迫使Ival_box用户重新编译。抽象类重新设计类层次结构:1. 图形用户界面系统是一个实现细节,对于用户应是隐蔽的。2. Ival_box类中不包含数据。3. 图形用户界面系统修改后,不应该重新编译那些使用Ival_box的代码。4. 针对不同图形用户界面系统的Iva
22、l_box在程序中共存。抽象类class Ival_box public:virtual int get_value() = 0;virtual void set_value(int i) = 0;virtual void reset_value(int i) = 0;virtual void prompt() = 0;virtual bool was_changed() const = 0;virtual Ival_box() /虚析构函数; 把Ival_box定义为抽象界面抽象类class Ival_slider : public Ival_box, protected BBwindow
23、public:Ival_slider(int,int);Ival_slider();int get_value();void set_value(int i);/ .protected:/ functions overriding BBwindow virtual functions/ e.g. BBwindow:draw(), BBwindow:mouse1hit()private:/ data needed for slider; 抽象类void f(Ival_box* p)/ .delete p; 保证正确的清理方式是在基类里定义一个虚析构函数Ival_box: Ival_box,并在派
24、生类适当地覆盖它。许多类都需要在它的对象消失之前做些清理工作。抽象类BBWindowIval_boxIval_sliderIval_dialPopup_sliderFlashing_sliderBBWindow图示:Ival_box的层次结构如下:其它实现方式class Ival_box /* . */ ;/ commonclass Ival_slider : public Ival_box, protected BBwindow /* . */ ; class Ival_slider : public Ival_box, protected CWwindow /* . */ ; 没有解决版本
25、问题:而且针对不同图形用户界面系统的Ival_slider的共存问题。其它实现方式BBwindowIval_boxBB_ival_sliderCWwindowCW_ival_slider图示:方案:采用不同的名字,定义几个Ival_sliderclass Ival_box /* . */ ;/ commonclass BB_ival_slider : public Ival_box, protected BBwindow /* . */ ; class CW_ival_slider : public Ival_box, protected CWwindow /* . */ ;其它实现方式BBw
26、indowIval_sliderBB_ival_sliderCWwindowCW_ival_sliderIval_box进一步将面向应用的Ival_box类与实现细节分开,从Ival_box派生出一个抽象的Ival_slider类。其它实现方式BBsliderIval_sliderBB_ival_sliderCWsliderCW_ival_sliderIval_boxBBwindowCWwindow通常还可以利用实现层次方面的一些更特殊的类。其它实现方式完整的层次结构是将原来面向应用的概念层次结构当作界面而组成的。Ival_boxIval_sliderIval_dialPopup_ival_s
27、liderFlashing _ival_slider其它实现方式针对各种图形用户界面系统的实现。class BB_ival_slider : public Ival_slider, protected BBslider /* . */ ;class BB_flashing_ival_slider : public Flashing_ival_slider,protected BBwindow_with_bells_and_whistles /* . */ ;class BB_popup_ival_slider : public Popup_ival_slider, protected BBsl
28、ider /* . */ ;class CW_ ival_slider : public Ival_slider, protected CWslider /* . */ 其它实现方式BBsliderIval_sliderBBipopIval_dialipopupiflashCWipopCWslIval_boxBBsliderBBisliderBBiflCWiflCWslBBb&wCWisliderCWsl完整的层次结构图示:对象创建的局部化应用中,可以利用Ival_box、Ival_slider等界面写出。对象的创建必须通过特定于实现的名字。如:创建CW_ival_dial和BB_flashing
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 礼仪用品行业产品线规划考核试卷
- 续签劳动合同案例分析
- 汽车配件客户服务礼仪培训考核试卷
- 电气设备在智能电网能源优化调度系统中的应用考核试卷
- 玻璃容器生产过程中的废料处理与回收考核试卷
- 水利工程中的雨水利用和洪水防治技术考核试卷
- 大班防拐骗安全教育教案
- 稀有金属加工质量改进方法创新与实施案例分析考核试卷
- 机场航站楼建筑节能技术与策略考核试卷
- 汽轮机在核能发电领域的优势分析考核试卷
- 高楼遮光补偿协议书范本
- 母乳喂养知识培训课件下载
- 西安市曲江第三中学行政人员及教师招聘笔试真题2024
- 2025-2030中国竹纤维行业市场发展现状及竞争策略与投资前景研究报告
- 委托外包催收合同协议
- 2025-2030中国涂装行业市场深度分析及发展预测与投资策略研究报告
- 乳腺癌诊治指南与规范(2025年版)解读
- 银行系统招聘考试(经济、金融、会计)模拟试卷14
- 心理韧性在咨询中的重要性试题及答案
- 外研版(三起)(2024)三年级下册英语Unit 2 单元测试卷(含答案)
- 2025年全国普通话水平测试训练题库及答案
评论
0/150
提交评论