C++中级培训教材5062.docx

上传人:you****now 文档编号:62897548 上传时间:2022-11-22 格式:DOCX 页数:56 大小:170.26KB
返回 下载 相关 举报
C++中级培训教材5062.docx_第1页
第1页 / 共56页
C++中级培训教材5062.docx_第2页
第2页 / 共56页
点击查看更多>>
资源描述

《C++中级培训教材5062.docx》由会员分享,可在线阅读,更多相关《C++中级培训教材5062.docx(56页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 附件三:教材模板说明:一、为便于于保存和和管理,各各类培训训教材均均采用合合订本。二、教材结结构:各类培训教教材由教教材封面面、前言言、课程程目录、单单门课程程教材和和封底五五部分构构成。三、教材封封面:1、封面颜颜色:教教材封面面为彩色色,工作作基本常常识教材材为深蓝蓝色,技技术基础础知识教教材为草草绿色,管管理基础础知识教教材为浅浅蓝色,营营销基础础知识教教材为墨墨绿色。2、教材名名称:采采用“工作基基本常识识”“技术术基础知知识”“管理理基础知知识”“营销销基础知知识”,字体体为隶书书,黑体体,600号。3、其他标标识:员员工培训训中心编编辑采用用宋体、黑黑体、三三号,位位于教材材名称

2、下下面;华华为技术术有限公公司采用用宋体、黑黑体、小小二,位位于底端端;华为为标识位位于华为为技术有有限公司司和员工工培训中中心编辑辑之间;右上角角为保密密标识,楷楷体,黑黑体,四四号。四、教材封封底:教材封底包包括教材材名称、华华为技术术有限公公司员工工培训中中心和时时间、版版本号,位位于页面面的右下下角。五、前言:教材前言为为各类培培训的目目的、课课程门类类、特点点、主要要内容的的简介。六、课程目目录:为各门课程程排列顺顺序的目目录,统统一编排排页码,便便于学员员查找。七、单门课课程教材材:各单门课程程教材由由课程封封面、章章节目录录、章节节内容、学学习要求求、思考考题、参参考资料料和相关

3、关网站组组成。1、课程封封面:课程封面为为彩色,课课程名称称为隶书书、600号、黑黑体、黑黑色,左左上角为为课程编编码。2、章节目目录:为宋体、小小四、黑黑色3、章节内内容:(1)标题题:章节节目分别别以“第一章章、第二二章、第第三章”“1.1、1.22、1.33”和“(1)(2)(3)”来表示示。章为为宋体、小小二、黑黑体,节节为宋体体、四号号、黑体体,目为为宋体、小小四、黑黑体。(2)文字字:每四四个小时时的培训训课程,字字数控制制在10000002000000字之间间。教材材文字一一般为宋宋体、小小四、黑黑色,行行间距为为一行半半。(3)内容容:章节节内容要要有完整整的理论论体系,不不能

4、成为为授课胶胶片的翻翻版。4、学习要要求:每章标题下下面为本本章的学学习要求求,以明明确本章章要掌握握的要点点。文字字为楷体体、小四四。5、思考题题:每章最后要要有思考考题,以以便帮助助学员复复习、思思考。6、参考资资料和相相关网站站:有参考资料料和相关关网站的的要附在在课程后后面,以以便帮助助学员查查阅。内部资料,注注意保密密C+中级级培训教教程员工培训中中心编辑辑2005年年6月VV1.00华为技术有有限公司司前言C+语言言中级教教材讲授授C+语言的的运用技技术,包包括:类类、对象象之间的的关系、对对象的存存储与布布局、运运算符重重载、智智能指针针、仿函函数、泛泛型编程程,C+模式式设计基

5、基本思想想。NE00220099cV11.01业务与软件件C+语言项项目C+进阶阶目录第一章类、接接口771.1 HHanddle-Boddy与接接口、抽抽象接口口71.2 多多继承、与菱形缺陷、this跳转等131.3 CC+多多态的两两种多态态形式和和区别188第二章重载载182.1 函函数重载载 192.2 运算算符重载载200第三章模板板 2293.1 模模块函数数2293.2 模块块类313.3STTL标准准模板库库344附录:参考考资料 39 ISC基本知识附录:名词解释前言我们在C+基础础课程中中已经了了解了CC+的的一些基基本概念念,知道道了什么么是类什什么是对对象。也也了解了

6、了继承、封封装、多多态等CC+面面向对象象的基本本特征,本本课程主主要是更更进一步步探讨一一下C+一些些基本模模型的应应用,加加深对概概念的理理解,由由于课程程时间有有限,CC+,模模型和内内容又如如此之多多,对任任何一个个模型都都无法深深入进去去,所以以只能泛泛泛而谈谈。第一章类、接接口学习要求: 11、了解解类的继继承、封封装等概概念之间间的关系系2、了解什什么是接接口,什什么是虚虚函数,它它有什么么样的特特点。学学会使用用接口编编程的思思想本章节主要要介绍CC+中中的类、接接口。类类,包涵涵了一组组数据和和一组基基于数据据上的一一组方法法。它描描述了一一个对象象的属性性、状态态和行为为;

7、接口口,它只只是描述述了一个个对象的的简单的的行为。有关类的基基本概念念:Claass nammes Cllasss meembeersMembeer FFuncctioonsStatiic MMembber FunnctiionssUnionnsC+ BBit FieeldssNesteed CClasss DDecllaraatioonsType Nammes in Claass ScoopeMultiiplee Baase ClaasseesVirtuual FunnctiionssAbstrractt CllasssesContrrolllingg Acccesss tto CClas

8、ss MMembbersspprivvateeMemmberrspprottecttedMMembbersspubliicMeembeersAccesss SSpeccifiierss foor BBasee Cllassses,ppriaavtee,puubliic、pprottecttedFriennds CoonsttrucctorrsDesstruuctoorsConnverrsioon FFuncctioonsthee neew ooperratoor aand thee deelette ooperratoorCopyiing Coonsttrucctorr Fuuncttionn

9、sInterrfacce1.1 Handlle-BBodyy与接口口、抽象象接口 在C+中封封装的概概念是把把一个对对象的外外观接口口同实际际工作方方式(实实现)分分离开来来,但是是C+的封装装是不完完全的,编译器必须知道一个对象的所有部分的声明,以便创建和管理它。我们可以想象一种只需声明一个对象的公共接口部分的编程语言,而将私有的实现部分隐藏起来。C + +在编译期间要尽可能多地做静态类型检查。这意味着尽早捕获错误,也意味着程序具有更高的效率。然而这对私有的实现部分来说带来两个影响:一是即使程序员不能轻易地访问实现部分,但他可以看到它;二是造成一些不必要的重复编译。然而C+并没没有将这这个原

10、则则应用到到二进制制层次上上,这是是因为CC+的的类既是是描述了了一个接接口同时时也描述述了实现现的过程程,示例例如下:classs CCMySStriingprivvatee:consst iint m_ccch;char *m_pszz;publlic:CMyyStrringg(coonstt chhar *pssz);CMMySttrinng();intt Leengtth() coonstt;intt Inndexx(coonstt chhar *pssz) connst;CMySttirnng对外外过多的的暴露了了内存布布局实现现的细节节,这些些信息过过度的依依赖于这这些成员员变量的

11、的大小和和顺序,从从而导致致了客户户过度依依赖于可可执行代代码之间间的二进进制耦合合关系,这这样的接接口不利利于跨语语言跨平平台的软软件开发发和移植植。1.1.1 Handlle-BBodyy模式解决这个问问题的技技术有时时叫句柄柄类(hhanddle claassees)或或叫“Cheeshiire Catt” 11 。有有关实现现的任何何东西都都消失了了,只剩剩一个单单一的指指针“m_ppThiis”。该指指针指向向一个结结构,该该结构的的定义与与其所有有的成员员函数的的定义一一样出现现在实现现文件中中。这样样,只要要接口部部分不改改变,头头文件就就不需变变动。而而实现部部分可以以按需要要

12、任意更更动,完完成后只只要对实实现文件件进行重重新编译译,然后后再连接接到项目目中。这里有这这项技术术的简单单例子。头头文件中中只包含含公共的的接口和和一个简简单的没没有完全全指定的的类指针针。classs CMMySttrinngHaandlleprivvatee:classsCMyyStrringg;CMySttrinng *m_ppThiis;publlic:CMyyStrringgHanndlee (cconsst ccharr *ppsz); CCMySStriingHHanddle ();intt Leengtth() coonstt;intt Inndexx(coonstt ch

13、har *pssz) connst;;CMySStriingHHanddle: CCMySStriingHHanddle(connst chaar *pszz):m_ppThiis(nnew CMyyStrringg(pssz);CMySStriingHHanddle: CMyyStrringgHanndlee() deelette mm_pTThiss;int CMyyStrringgHanndlee:LLenggth()retturnn m_pThhis-Leengtth();int CMyyStrringgHanndlee:IIndeex(cconsst ccharr *ppsz) re

14、tturnn m_pThhis-Inndexx(pssz);这是所有有客户程程序员都都能看到到的。这这行classsCMMySttrinng;是一个没有有完全指指定的类类型说明明或类声声明(一一个类的的定义包包含类的的主体)。它它告诉编编译器,cheshire 是一个结构的名字,但没有提供有关该结构的任何东西。这对产生一个指向结构的指针来说已经足够了。但我们在提供一个结构的主体部分之前不能创建一个对象。在这种技术里,包含具体实现的结构主体被隐藏在实现文件中。在设计模模式中,这这就叫做做Hanndlee-Boody 模式,Handle-Body只含有一个实体指针,服务的数据成员永远被封闭在服务系

15、统中。Handlle-BBodyy模式如如下:classHandlem_pThisclass图1 Handlle-BBodyy模式(句句柄类做做为接口口)Handlle-BBodyy的布局局结构永永远不会会随着实实现类数数据成员员的加入入或者删删除或者者修改而而导致HHanddle-Boddy的修修改,即即Hanndlee-Boody协协议不依依赖于CC+实实现类的的任何细细节。这这就有效效的对用用户的编编译器隐隐藏了这这些斜街街,用户户在使用用对这项项技术时时候,HHanddle-Boddy 接接口成了了它唯一一的入口口。然而Hanndlee-Boody模模式也有有自己的的弱点:1、 接口类

16、必须须把每一一个方法法调用显显示的传传递给实实现类,这这在一个个只有一一个构造造和一个个析构的的类来说说显然不不构成负负担,但但是如果果一个庞庞大的类类库,它它有上百百上千个个方法时时候,光光是编写写这些方方法传递递就有可可能非常常冗长,这这也增加加了出错错的可能能性。2、 对于关注于于性能的的应用每每一个方方法都得得有两层层的函数数调用,嵌嵌套的开开销也不不理想3、 由于句柄的的存在依依然存在在编译连连接器兼兼容性问问题。接口和实现现分离的的Hanndlee-Boody。1.1.2 抽象接口使用了“接口与与实现的的分离”技术的的 Haandlle-BBodyy 解决决了编译译器/链链接器的的

17、大部分分问题,而而C+面向对对象编程程中的抽抽象接口口同样是是运用了了“接口与与实现分分离”的思想想,而采采用抽象象接口对对于解决决这类问问题是一一个极其其完美的的解决方方案。1、 抽象接口的的语言描描述:classs IMMySttrinngvirrtuaal iint Lenngthh() connst = 00; /这这表示是是一个纯纯虚函数数,具有有纯虚函函数的接接口virrtuaal iint Inddex(connst chaar *pszz) cconsst = 0;;2、 抽象接口的的内存结结构:classvtprclass:m1class:m2图2 抽象接口的的内存布布局3、

18、 抽象接口口的实现现代码:接口:classs IMMySttrinngviirtuual intt Leengtth() coonstt = 0; /这表示示是一个个纯虚函函数,具具有纯虚虚 /函数数的接口口viirtuual intt Inndexx(coonstt chhar *pssz) connst = 00;; 实现现:claass CMyyStrringg:puubliic IIMySStriingprivvatee:consst iint m_ccch;chaar *m_ppsz;publlic:CMyyStrringg(coonstt chhar *pssz);virrtuaa

19、l CMyyStrringg();intt Leengtth() coonstt;intt Inndexx(coonstt chhar *pssz) connst;从上面采采用抽象象接口的的实例来来看,抽抽象接口口解决了了Hanndlee-Boody所所遗留下下来的全全部缺陷陷。抽象接口的的一个典典型应用用:抽象工厂厂(AbbstrracttFacctrooy)图3 抽象工厂模模式1.2 多继承与菱菱形缺陷陷、thhis跳跳转等多重继承是是C+语言独独有的继继承方式式,其它它几乎所所有语言言都秉承承了单一一继承的的思想。这这是因为为多重继继承致命命的缺陷陷导致的的:1.2.1 菱形缺陷当继承基

20、类类时,在在派生类类中就获获得了基基类所有有的数据据成员副副本。假假如类BB 从AA1和AA2两个个类多重重继承而而来,这这样B类类就包含含A1、AA2类的的数据成成员副本本。考虑如果果A1、AA2都从从某基类类派生,该该基类称称为Baase,现现在继承承关系如如下:图4 菱形继承关关系我们C+语言来来描述这这种继承承关系:classs Baase ;classs A11 :ppubllic Basse ;classs A22 :ppubllic Basse ;classs B :puubliic AA1,ppubllic A2 ;那么A1、AA2都具具有Baase的的副本。这这样B就就包含了

21、了Basse的两两个副本本,副本本发生了了重叠,不不但增加加了存储储空间,同同时也引引入了二二义性。这这就是菱菱形缺陷陷,菱形形缺陷时时间是两两个缺陷陷:1、 子对象重叠叠2、 向上映射的的二义性性。菱形缺陷的的其中一一种解决决办法将将在C+世世界里最最广泛的的使用虚虚拟继承承解决菱菱形缺陷陷的应用用便是标标准C+的输输入/输输出ioostrreamm;图5 标准C+的输入入/输出出1.2.2 多重接口与与方法名名冲突问问题(SSiammesee twwinss)对继承而而来的虚虚函数改改写很容容易,但但是如果果是在改改写一个个“在两个个基类都都有相同同原型”的虚函函数情况况就不那那么容易易了

22、。提出问题:假设汽车车最大速速度的接接口为IICarr,潜艇艇最大速速度的接接口为 IBooat,有有一个两两栖类的的交通工工具它可可以奔跑跑在马路路上,也也可以航航行在大大海中,那那么它就就同时拥拥有ICCar、IIBoaat两种种交通工工具的最最大速度度特性,我我们定义义它的接接口为IICarrBoaat;classs ICaar viirtuual intt GeetMaaxSppeedd()= 0;classs IBoaat virrtuaal iint GettMaxxSpeeed()= 0; 我们们先对IICarrBoaat的接接口做一一个尝试试:classs CCCarrBoaa

23、tvirrtuaal iint GettMaxxSpeeed();/既既完成IICarr的GeetMaaxSppeedd()接接口方法法又 /完成IIBoaat的接接口方法法?显然然不能够够;解决问题:显然上面这这个尝试试根本就就无法成成功,只只用一个个实现方方法,怎怎么能够够求出这这个ICCarBBoatt交通工工具奔跑跑在马路路上的最最高时速速,同时时也能够够求出航航行在大大海上的的最大航航行速度度呢。上面这一一问题矛矛盾就在在一一个个方法,却却需要两两个答案案。看来来ICaarBooat要要返回两两个答案案就必须须有两个个方法了了,我们们假设一一个方法法是求在在陆地上上奔跑的的速度,名名

24、称为GGetCCarMMaxSSpeeed();另一个个方法是是求在大大海上航航行的最最大速度度,名称称为GeetBooatMMaxSSpeeed();那这两两个方法法又怎么么和GeetMaaxSppeedd()接接口方法法联系起起来呢;幸运的是是,我们们找到了了解决办办法,而而且解决决办法有有很多种种,下面面介绍一一下继承承法。classs IIXCarr :ppubllic ICaar viirtuual intt GeetMaaxSppeedd()GeetCaarMaaxSppeedd();virrtuaal iint GettCarrMaxxSpeeed() = 00;;classs

25、IXBBoatt:puubliic IIBoaatvirrtuaal iint GettMaxxSpeeed()GeetBooatMMaxSSpeeed();virrtuaal iint GettBoaatMaaxSppeedd() = 00;;classsCCCarBBoatt: ppubllic IXCCar , ppubllic IXBBoattvirrtuaal iint GettCarrMaxxSpeeed()virrtuaal iint GettBoaatMaaxSppeedd();图6 多重接口与与方法名名冲突问问题1.2.3 this跳跳转this跳跳转是指指的“对象同同一性”

26、问题。在单一继继承的世世界内,无无论继承承关系怎怎么复杂杂,针对对于同一一对象,无无论它的的子类或或者父类类的thhis指指针永远远相等。即即如果有有下面的的模型:图7 B从A继承承的关系系图那么 对对于一个个已经实实例化BB类的对对象 bbObjjectt,永远远有(BB*)&bObbjecct =(AA*)&bObbjecct 成成立。但是在多多继承的的世界内内,上面面的等式式就不能能恒成立立,对象象的同一一性受到到了挑战战。特别的是是,在多多继承世世界内如如果图四四的菱形形关系存存在情况况下,如如果对于于已经实实例化BB类的对对象bOObjeect; (BBasee*)(AA1*)&bO

27、bbjecct != (BBasee*)(AA2*)&bObbjecct 成成立,当当这种事事情发生生的时候候我们就就只能特特殊处理理了。这这种情况况在COOM应用用中处处处都会发发生。1.3 C+多态态的两种种多态形形式和区区别C+有两两种多态态多态形形式:1、 编译时刻多多态,编编译时刻刻多态依依靠函数数重载或或者模板板实现2、 运行时刻多多态。运运行时刻刻多态依依靠需函函数虚接接口实现现第二章重载载学习要求:1、了解什什么是函函数重载载,什么么是运算算符重载载2、学会运运用智能能指针,仿仿函数在C+的的世界里里,有两两种重载载:函数数重载和和运算符符重载,函函数重载载就采用用采用参参数匹

28、配配的原则则,进行行重载的的,它是是一种编编译时刻刻的多态态。而运运算符重重载,使使采用改改写或者者说重新新定义CC+的的内嵌运运算符的的方法。有关重载的的基本概概念:Overlloadded FunnctiionssOverlloadded OpeerattorssDeclaarattionn MaatchhinggArgummentt MaatchhinggArguumennt TTypees MMatcchinngArguumennt CCounnts MattchiingC+ UUnarry OOperratoorsBinarry OOperratoorsSmarrt PPoinnte

29、rrFuncttionn obbjeccts1.1 函数重载函数重载载方法是是在当前前范围内内选择一一个最佳佳匹配的的函数声声明供调调用该方方法者使使用。如如果一个个适合的函函数被找找到后,这这个函数数将会被被调用,在在这里“适合的的”是指按按下列顺顺序匹配配的符合合下面条条件的:1、 一个精确匹匹配的函函数被找找到2、 一个参数只只有细微微的差别别,几乎乎可以忽忽略不计计的 。3、 象类似通过过子类向向父类转转化达到到参数匹匹配的4、 通过正常转转化函数数进行类类型转换换,能够够达到参参数匹配配到的。5、 通过用户自自定义的的转化函函数(如如转化运运算符或或者构造造函数)达达到参数数匹配的的

30、6、 参数是采用用省略符符号函数重载载的方法法基本上上有:1、 根据函数参参数数据据类型的的不同进进行的重重载;2、 根据参数个个数的不不同进行行的重载载;3、 缺省参数上上的重载载我们在这这里把缺缺省参数数也称为为一种函函数重载载,实际际上它并并不是严严格意义义上的重重载。在在使用缺缺省参数数时必须须记住两两条规则则。第一一,只有有参数列列表的后后部参数数才可是是缺省的的,也就就是说,我我们不可可以在一一个缺省省参数后后面又跟跟一个非非缺省的的参数。第第二,一一旦我们们开始使使用缺省省参数,那那么这个个参数后后面的所所有参数数都必须须是缺省省的。第第三,缺缺省参数数只能放放在函数数声明中中。

31、第四四,缺省省参数可可以让声声明的参参数没有有标识符符。4、 返回值重载载特别注注意,在在C+中并没没有根据据返回返返回值的的不同进进行重载载的,即即我们不不能定义义这样的的函数:voidd f();int f();在C+中这样样的函数数声明方方法是被被禁止的的,但是是我们有有时间可可能又需需要这样样的重载载方法,我我们又怎怎么实现现呢,其其实很简简单,jjianng函数数的参数数进行扩扩展,将将这个函函数返回回值的数数据类型型,做为为扩展参参数的数数据类型型来。如如下:voidd f(vvoidd);voidd f(iint);此时这个个例子中中的参数数列表的的数据,只只在编译译时刻起起到分

32、练练函数的的作用,在在运行时时刻并不不起到传传值作用用,模板板中经常常都应用用到了这这种方法法。1.2 运算符重载载你可以重新新定义CC+绝绝大多数数内嵌运运算符的的实现方方法和功功能,这这些重定定义的或或者说重重载的运运算符,有有可能全全局作用用的,也也有可能能作用在在类基础础之上的的,运算算符重载载的实现现可能以以类的成成员函数数的形式式出现,也也有可能能以全局局性的函函数的身身份出现现。在C+中重载载运算符符的名字字为opperaatorrx, 在这这里 xx 是一一个可重重载的运运算符,如如:重载载 加法法运算符符,你需需要定义义一个名名为 ooperratoor+的的函数,然然后实现

33、现他,其其它的类类似定义义就可以以了,例例如:Classscommpleex/verrysiimpllifiiedccompplexxdoublleree,imm;publiic:compllex(douubleer,ddoubbleii):rre(rr),iim(ii);compllexooperratoor+(commpleex);compllexooperratoor*(commpleex);定义了ccompplexx 这个个复数的的一个简简单的实实现概念念模型。一一个复数数是由一一对dooublle类型型的数据据组成,并并定义了了这个复复数的两两个方法法,加法法运算 commpleex

34、:opeerarrtorr+()和和乘法运运算 ccompplexx:ooperratoor*().现在我我们就能能够实现现下面的的复数表表达式了了:void f()compllex a = coompllex(1,3.11);compllex b = coompllex(1.22,2);compllex c = b;a = bb + c;b = bb + c * a;c= a * bb + commpleex(11,2);1.3.1 C+可重重载的和和C+不可重重载的运运算符可重载运算算符表:OperaatorrNameTypeOperaatorrNameType,CommaaBinarry

35、*Pointter-to-memmberr seelecctioonBinarry!Logiccal NOTTUnaryy/DivissionnBinarry!=InequualiityBinarry/=Divissionn/asssiggnmeentBinarry%ModullusBinarryLess thaanBinarry%=Modullus/asssignnmenntBinarryLeft shiiftBinarry&Bitwiise ANDDBinarry=Left shiift/asssignnmenntBinarry&Addreess-ofUnaryyGreatter thaa

36、nBinarry*MultiipliicattionnBinarry=Greatter thaan oor eequaal ttoBinarry*Pointter derrefeerennceUnaryyRightt shhifttBinarry*=Multiipliicattionn/asssiggnBinarry=Rightt shhiftt/asssiggnmeentBinarry+AddittionnBinarry Arrayy suubsccrippt+Unaryy PllusUnaryyExcluusivve OORBinarry+Increemennt1Unaryy=Excluu

37、sivve OOR/aassiignmmenttBinarry+=Addittionn/asssiggnmeentBinarry|Bitwiise incclussivee ORRBinarrySubtrracttionnBinarry|=Bitwiise incclussivee ORR/asssiggnmeentBinarryUnaryy neegattionnUnaryy|Logiccal ORBinarryDecreemennt1UnaryyOness coompllemeentUnaryy=Subtrracttionn/asssiggnBinarrydelettedeletteMem

38、beer sseleectiionBinarrynew不可重载运运算符表表:OperaatorrName.Membeer sseleectiion.*Pointter-to-memmberr seelecctioon:Scopee reesollutiion? :Condiitioonall#Preprroceessoor ssymbbol#Preprroceessoor ssymbbol 在上面面可重载载的运算算符可以以看出运运算符重重载共分分为两类类:一元元运算符符重载和和二元运运算符重重载一元运算算符重载载:在声明明一个类类的非静静态的一一元运算算符重载载函数时时,你必必须声明明的形式式

39、如下:ret-ttypeeopeerattoroop() (1)在这里里rett-tyype 是指返返回数据据类型 op 是指一一元运算算符在声明明一个全全局的一一元运算算符重载载函数时时,你必必须声明明的形式式日下:ret-ttypeeopeerattoroop(argg)(2)在这里里 reet-ttypee 与 op 和上面面的意思思一样,aarg 是指这这个运算算符所作作用的数据据类型二元运算算符重载载:在声明一个个类的非非静态的的二元运运算符重重载函数数时,你你必须声声明的形形式如下:ret-ttypeeopeerattoroop(arg)(3)(3)式和和二式基基本相同同 arrg

40、 可可以是任任何一个个在声明明一个全全局的二二元运算算符重载载函数时时,你必必须声明明的形式式日下:ret-ttypeeopeerattoroop(argg1,argg2)(4)在这里里 reet-ttypee 与 op 和上面面的意思思一样,aarg11,arrg2, 是指指这个运运算符所作作用两个个数据类类型1.3.2 几类特殊的的运算符符重载1、 类型转换运运算符所有的的数据类类型均可可以定义义构造函函数,包包括系统统定义的的数据类类型和用用户自定定义的数数据类型型,如:classs CCStrringgoperaatorrLPCCSTRR() connst;;应用:CStrringg

41、sttr = “123345”;LPCSSTR lpssz = sttr;/此处处会进行行LPCCSTRR运算 这只只是一个个简单的的应用的的示例,其其实有时时间类型型转换具具有无比比强大的的功能。我我曾经就就是用类类型装换换运算符符重载解解决一个个跨平台台通信的的问题。2、 bool运运算符重重载int、ffloaat、bbooll等运算算符也是是可以重重载的,例例如重载载boool运算算符,但但是重载载运算符符boool 时时候,需需要注意意有很多多麻烦和和臆想不不到的东东西templlateeclasss teestbboolloperaatorrboool() coonsttthrrow() returrnm_ pTT != 0; privaate:T*m_pT;下面结果均均通过编编译testbboo

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

当前位置:首页 > 管理文献 > 管理手册

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁