欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《c与c的区别》PPT课件.ppt

    • 资源ID:64370247       资源大小:288.50KB        全文页数:80页
    • 资源格式: PPT        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《c与c的区别》PPT课件.ppt

    数 据 结 构 与 算 法 分 析从从C 语言语言到到C+语言语言数 据 结 构 与 算 法 分 析C+的学习用书的学习用书v任何一本你能接触到的C+编程书籍v谭教授的书v清华 王燕 面向对象的理论与C+实践v航空工业 赵建周 C和C+程序设计教程数 据 结 构 与 算 法 分 析C与与C+的不同的不同vC+在代码上对C的扩充v大不相同C:面向过程C+:面向对象 数 据 结 构 与 算 法 分 析面向过程程序设计面向过程程序设计C语言语言v选定数据结构、设计算法过程或函数。程序执行被看作各过程调用的序列。v面向过程编程:程序=数据结构+算法v设计思路自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。v炒菜吃 种菜、洗菜、切菜、炒菜数 据 结 构 与 算 法 分 析面向面向过程过程的的结构化结构化程序设计方法程序设计方法v缺点:可重用性差、数据安全性差、难以开发大型软件和图形界面的应用软件把数据和处理数据的过程分离为相互独立的实体。当数据结构改变时,所有相关的处理过程都要进行相应的修改。每一种相对于老问题的新方法都要带来额外的开销。图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。数 据 结 构 与 算 法 分 析面向对象程序设计面向对象程序设计C+语言语言v将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体对象。v对同类型对象抽象出其共性,形成类。v主要特征是各对象之间的消息传递和各类之间的继承。v类通过一个简单的外部接口,与外界发生关系。v对象与对象之间通过消息进行通信。数 据 结 构 与 算 法 分 析面向对象程序设计面向对象程序设计v一个类的集合和各类之间以继承关系联系起来的结构,再加上一个主程序,在主程序中定义各对象并规定它们之间传递消息的规律。v面向对象编程:对象=数据结构+算法(封装);程序=对象+对象+对象+v炒菜吃:买净菜、按照烹调说明书炒菜数 据 结 构 与 算 法 分 析面向对象程序设计面向对象程序设计v优点:程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。数 据 结 构 与 算 法 分 析C语言中的关键字语言中的关键字vAuto break case char continue default do double else entry enum extern for float goto if int long register return short signed sizeof static struct switch typedef union unsigned while 数 据 结 构 与 算 法 分 析C+语言中的关键字语言中的关键字vAsm auto break case catch*cdecl char class*const continue default delete*do double else enum extern far float for friend*goto huge if inline*int interrupu long near new*operator*pascal private*protected*public*register return short signed sizeof static struct switch template*this*throw*try*typedef union unsigned virtual*void volatile while 数 据 结 构 与 算 法 分 析C+对对C的保留的保留vC+具有对传统C语言的向后兼容性,很多已有的C程序可以稍加改造就可以重用。v虽然C+具备面向对象的处理能力,但它还是保留了很多面向过程的东西。用C+完全可以不用面向对象的思想来进行程序设计,当然人们不会这样去做除了那些只是把C+看成是C扩充的初学者。数 据 结 构 与 算 法 分 析C+对对C在代码上的扩充在代码上的扩充vcout 代替 printf,scanfPrintf,scanf 都必须配合%d、%f等格式控制符使用Cout后面直接跟上操作数即可,不用格式控制符;vnew,delete 代替malloc,freeNew自动计算要分配的类型大小,省事,避免偶然错误;它自动返回正确的指针类型,不必进行类型转换;可以用new将分配的对象初始化;数 据 结 构 与 算 法 分 析一个简单的C+程序例子#include#include void main()string user_name;cout user_name;cout n Hello,user_name.and goodbye!n;数 据 结 构 与 算 法 分 析C+对对C在代码上的扩充在代码上的扩充v引用 void swap(int&a,int&b)作用:传递数据、不复制副本v函数重载:一物多用vint max(int a,int b,int c)vlong max(long a,long b,long c)vfloat max(float a,float b,float c)数 据 结 构 与 算 法 分 析几个几个C+的概念的概念v面对对象技术:软件系统对现实世界的直接模拟,尽量实现将现实世界中的事物直接影射到软件系统的解空间。现实空间问题面向对象解空间物质:一辆白色的自行车意识:自行车具体事物:一个对象-自行车的实例抽象概念:自行车类数 据 结 构 与 算 法 分 析几个几个C+的概念的概念v对象:在系统中用来描述客观事物的,其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体,它是用来构成系统的基本单位。v对象由一组属性和一组行为构成。属性:用来描述对象静态特征的数据项。行为:用来描述对象动态特征的操作序列。数 据 结 构 与 算 法 分 析几个几个C+的概念的概念-对象对象对象名:王东对象的状态:性别:男身高:180 cm体重:68 kg对象的功能(可做的操作):回答身高回答体重回答性别修理电器教计算机课均属于自身所承受的操作均属于施加于其他对象的操作行为:用来描述对象动态特征的操作序列属性:用来描述对象静态特征的数据项。一个人,王东,男,身高180 cm,体重68 kg,会修电器、能教计算机课。数 据 结 构 与 算 法 分 析几个几个C+的概念的概念类类v分类人类通常的思维方法。生活中,我们总是会把各种物体进行分类。v分类所依据的原则抽象忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。例如,石头、树木、汽车、房屋等都是人们在长期的生产和生活实践中抽象出的概念,它们分别代表了各种不同类的物体。数 据 结 构 与 算 法 分 析几个几个C+的概念的概念v类:具有相同属性和服务的一组对象的集合,是对一组客观对象的抽象,它将该组对象所具有的共同特征(包括属性特征和行为特征)集中起来,以说明该组对象的能力和性质。v如,“表”,属性特征:时、分、秒;行为特征:设定时间,显示时间。v类是多个实例的综合抽象,而实例又是类的个体实物。v利用类可以实现数据的封装、隐藏、继承与派生。数 据 结 构 与 算 法 分 析类与对象类与对象类的声明类的声明v 类是一种用户自定义类型,声明形式:class 类名称 public:公有成员(外部接口)private:私有成员 protected:保护型成员Class 声明类的名称,用public、private和protected 关键字来说明类的成员的访问控制属性,最后给出成员函数的实现。数 据 结 构 与 算 法 分 析类与对象类与对象类类v公有类型成员:在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。v私有类型成员:在关键字private后面声明,只允许本类中的函数访问,而类外部的任何访问都是非法的。v保护类型成员:与private类似,其差别表现在继承与派生时对派生类的影响不同。数 据 结 构 与 算 法 分 析类的一个例子类的一个例子class Clock public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;成员数据(属性)成员函数(行为)数 据 结 构 与 算 法 分 析void Clock:SetTime(int NewH,int NewM,int NewS)Hour=NewH;Minute=NewM;Second=NewS;void Clock:ShowTime()coutHour:Minute:”操作符指针-类成员函数数 据 结 构 与 算 法 分 析类的声明类的声明v成员数据:与一般的变量声明相同,但需要将它放在类的声明体中。v成员函数:称为“方法”,一个方法对应一个操作。可以在类中说明原型,在类外给出函数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形成内联成员函数。v一般而言,数据成员用private,成员函数用public只有被声明为public的方法(成员函数)才能被外界所激活v简单的成员函数的实现直接嵌入类的声明中(inline),复杂的则可写在外面。数 据 结 构 与 算 法 分 析类与对象类与对象对象对象v类的对象是该类的某一特定实体,即类类型的变量。v声明形式:类名 对象名;v例:Clock myClock;数 据 结 构 与 算 法 分 析类中成员的访问方式类中成员的访问方式v类中成员互访直接使用成员名v类外访问:外界通过发“消息”来激活有关方法,所谓消息,其实就是一个命令,由程序语句来实现使用“对象名.成员名”方式访问 public 属性的成员,注:类外部不能访问私有性成员,只有本类中的函数可以访问。v如:myClock.ShowTime()就是向对象myClock发出一个消息,通知它执行display方法 数 据 结 构 与 算 法 分 析一个例子一个例子int main()Clock myClock;myClock.SetTime(8,30,30);myClock.ShowTime();#includeclass Clock ./类的声明略/.类的实现略数 据 结 构 与 算 法 分 析构造函数构造函数v构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。(在声明对象时进行的数据成员设置,称为对象的初始化。)v构造函数也是成员函数,被声明为公有型,与类名同名,无返回值。v构造函数在对象创建时由系统自动调用。v构造函数也可以被重载,在对象创建时由系统自动调用。v如果程序中未声明,则系统自动产生出一个默认形式的构造函数,该函数没有参数,不进行任何操作数 据 结 构 与 算 法 分 析构造函数举例构造函数举例class Clockpublic:Clock(int NewH,int NewM,int NewS);/构造函数void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;数 据 结 构 与 算 法 分 析构造函数的实现:Clock:Clock(int NewH,int NewM,int NewS)Hour=NewH;Minute=NewM;Second=NewS;建立对象时构造函数的作用:int main()Clock c(0,0,0);/隐含调用构造函数,将初始值作为实参。c.ShowTime();数 据 结 构 与 算 法 分 析析构函数析构函数v“清理善后”:在撤销对象时,系统自动调用析构函数(destructor),释放此对象所属的空间。v析构函数名:与类名相同,只是在函数名前面加一个“”,以区别于构造函数v只能用一个析构函数,不能重载v若用户未编写析构函数,编译系统会自动生成一个缺省的析构函数,它不进行任何操作数 据 结 构 与 算 法 分 析构造函数和析构函数举例构造函数和析构函数举例#includeclass Point public:Point(int xx,int yy);Point();/.其他函数原型 private:int X,int Y;Point:Point(int xx=0,int yy=0)X=xx;Y=yy;Point:Point()/.其他函数的实现略Point PointA/点A(0,0)Point PointB(4,5)/B(4,5)数 据 结 构 与 算 法 分 析类的应用举例类的应用举例1#includeclass Clock /时钟类的声明 public:/外部接口,公有成员函数 void SetTime(int NewH=0,int NewM=0,int NewS=0);void ShowTime();private:/私有数据成员 int Hour,Minute,Second;数 据 结 构 与 算 法 分 析/时钟类成员函数的具体实现void Clock:SetTime(int NewH,int New,Mint NewS)Hour=NewH;Minute=NewM;Second=NewS;void Clock:ShowTime()coutHour:Minute:Second;数 据 结 构 与 算 法 分 析/主程序Void main()clock myClook;/定义对象myClockcout“First time set and output:”endl;myClook.SetTime();/设置时间为默认值myClook.ShowTime();/显示时间cout“Second time set and output;”endl;myClook.SetTime(8,30,30);/设置时间为8:30:30myClook.ShowTime();/显示时间数 据 结 构 与 算 法 分 析程序运行结果:First time set and output:0:0:0Second time set and output:8:30:30程序由类Clock的定义、类成员函数的实现和主函数三个独立部分组成,通过类对问题进行了高度的抽象和封闭化的描述,在主程序中声明类的实例对象并完成消息的传递从而解决了问题。数 据 结 构 与 算 法 分 析面向对象的特性面向对象的特性v封装性v继承性v多态性数 据 结 构 与 算 法 分 析封装性封装性v封装:将一个数据和与这个数据有关的操作集合放在一起,形成一个能动的实体-对象,用户不必知道对象行为的实现细节,只需根据对象提供的外部特性接口访问对象即可。v从用户的角度来看,这些对象的行为就象包含在一个“黑匣子”里,是隐蔽的、看不见的。数 据 结 构 与 算 法 分 析C+的封装思想的封装思想vC+利用类(class)的形式来实现封装的。v具有相同结构和特性的所有对象构成一种“类型”类(class)v类是用来定义对象的一种抽象数据类型v对象(object):数据(属性)操作(行为)v类是对具有相同结构和特性的对象的抽象,而对象是类的具体实例(instance)首都类:北京、巴黎、莫斯科、华盛顿v类相当于是用户自定义的数据类型,其性质和其他数据类型(如整型、实型)相同数 据 结 构 与 算 法 分 析vstructstudent intnumber;char name10;char sex;floatsocre;struct student student1,student2;只包含数据,只包含数据,不包含操作不包含操作数 据 结 构 与 算 法 分 析C+如何封装数据和操作?class student private:intnumber;char name10;floatsocre;public:void display()cout“number:”numerendl;voidsetnum(int a)number=a;student stud1,stud2stud1.display()对象对象类名类名数据成员数据成员成员函数成员函数数 据 结 构 与 算 法 分 析v一般而言,数据成员用private,外界无法随意改动数据v成员函数用public,外界能够方便的访问操作数据v简单的成员函数的实现直接嵌入类的声明中(inline),复杂的则可写在外面。v声明为private的私有数据,外部无法访问;通过public的成员函数为类提供外部接口,外界只能通过这个接口来与该类发生联系。v外界通过发“消息”来激活有关方法,所谓消息,其实就是一个命令,由程序语句来实现C+的封装的封装数 据 结 构 与 算 法 分 析vStud1.setnum()就是向对象stud1发出一个消息,通知它执行setnum()方法(设定学号)vstud1.display()就是向对象stud1发出一个消息,通知它执行display方法(显示学号)v所以,我们不必了解或改动这个“黑匣子”的具体结构和算法,只需通过接口就能方便地完成数据的通信和执行相关的操作。v通过类的机制实现了对数据的有效隐蔽,使程序中不同部分之间的相互影响减少到最低程度,增强了程序的安全性。C+的封装的封装数 据 结 构 与 算 法 分 析继承与派生继承与派生v面向对象技术强调软件的可重用性,在C+中可重用性是通过“继承”这一机制来实现的v例:我们想在前面的学生信息中增加“年龄”“地址”等信息是重新定义一个新的类student1?还是在已有类student的基础上加上一些新的内容?数 据 结 构 与 算 法 分 析v“长方形”继承了“形状”的全部特征,“正方形”继承了“长方形”的全部特征v“长方形”是“形状”派生出来的一个分支,“正方形”是“长方形”派生出来的一个分支形状形状shape椭圆形椭圆形ellipse长方形长方形rectangle三角形三角形triangle圆形圆形circle正方形正方形square直角直角三角形三角形钝角钝角三角形三角形锐角锐角三角形三角形数 据 结 构 与 算 法 分 析问题举例问题举例数 据 结 构 与 算 法 分 析继承与派生继承与派生v在C+中所谓“继承”就是在一个已存在的类的基础上新增自己的特性而建立一个新的类v已存在的类称为“基类”或“父类”,新建立的类称为“派生类”或“子类”v派生类继承了基类的所有数据成员和成员函数,并增加了新的成员v继承使我们得以将一群相关的类组织起来,并让我们得以分享其间的共通数据和操作行为v保持已有类的特性而构造新类的过程称为继承。数 据 结 构 与 算 法 分 析派生类的声明派生类的声明class 派生类名:继承方式 基类名 成员声明;三种继承方式:三种继承方式:公有继承、私有继承、保护继承不同继承方式的影响主要体现在:不同继承方式的影响主要体现在:派生类成员成员对基类成员的访问权限通过派生类对象对象对基类成员的访问权限数 据 结 构 与 算 法 分 析class student1:public student private:int age;string address;public:void display_1()cout“age:”ageendl;cout“address:”addressendl;表明表明student1为为公用派生类公用派生类private表明表明student1为为私有派生类私有派生类数 据 结 构 与 算 法 分 析公有继承公有继承(public)v基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。v派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。v通过派生类的对象只能访问基类的public成员。数 据 结 构 与 算 法 分 析私有继承私有继承(private)v基类的public和protected成员都以private身份出现在派生类中,但基类的private成员不可直接访问。v派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。v通过派生类的对象不能直接访问基类中的任何成员。数 据 结 构 与 算 法 分 析保护继承保护继承(protected)v基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可直接访问。v派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。v通过派生类的对象不能直接访问基类中的任何成员数 据 结 构 与 算 法 分 析派生类的继承关系基类基类私有私有(private)成成员员公用公用(public)成员成员保护保护(protected)成员成员公用公用(public)派生类派生类不可访问的不可访问的成员成员公用成员公用成员保护成员保护成员私有私有(private)派生类派生类不可访问的不可访问的成员成员私有成员私有成员私有成员私有成员数 据 结 构 与 算 法 分 析protected 成员的特点与作用成员的特点与作用v对建立其所在类对象的模块来说,它与 private 成员的性质相同。v对于其派生类来说,它与 public 成员的性质相同。v既实现了数据隐藏,又方便继承,实现代码重用。数 据 结 构 与 算 法 分 析例例 公有继承举例公有继承举例class Point/基类Point类的声明public:/公有函数成员void InitP(float xx=0,float yy=0)/构造函数初始化 X=xx;Y=yy;void Move(float xOff,float yOff)/移动该点 X+=xOff;Y+=yOff;float GetX()return X;/返回X轴坐标值float GetY()return Y;/返回Y轴坐标值private:/私有数据成员float X,Y;数 据 结 构 与 算 法 分 析class Rectangle:public Point /派生类声明(长方形类)public:/新增公有函数成员void InitR(float x,float y,float w,float h)/设置长方形InitP(x,y);W=w;H=h;/调用基类公有成员函数float GetH()return H;/返回长方形的高float GetW()return W;/返回长方形的宽private:/新增私有数据成员float W,H;/长、宽;数 据 结 构 与 算 法 分 析#include#include/数学公式的头文件int main()Rectangle rect;rect.InitR(2,3,20,10);/设置长方形rect.Move(3,2);/通过派生类对象访问基类公有成员coutrect.GetX(),/2+3=5 rect.GetY(),/3+2=5rect.GetW(),/20 rect.GetH()a)a=b;vif(ca)a=c;vreturn a;vdouble max2 (double a,double b,double c)类型不同的数据间比较需分别调用两个不同名的函数来实现。a1、b1、c1为 int 型:max1(a1,b1,c1)a2、b2、c2为double型:max2(a2,b2,c2)数 据 结 构 与 算 法 分 析函数重载的一个例子函数重载的一个例子C+中中vint max(int a,int b,int c)vvif(ba)a=b;vif(ca)a=c;vreturn a;vdouble max (double a,double b,double c)if(ba)a=b;if(ca)a=c;return a;a1、b1、c1为 int 型:max(a1,b1,c1)a2、b2、c2为double型:max(a2,b2,c2)类型不同的数据间比较可以使用同名的函数来实现,程序自动判断选择合适的类型。数 据 结 构 与 算 法 分 析运算符重载 例例 8-1 将“+”、“-”运算重载为复数类的成员函数。v 规则:实部和虚部分别相加减。实部和虚部分别相加减。v 操作数:两个操作数都是复数类的对象。两个操作数都是复数类的对象。数 据 结 构 与 算 法 分 析#includeclass complex/复数类声明public:/外部接口complex(double r=0.0,double i=0.0)real=r;imag=i;/构造函数complex operator+(complex c2);/+重载为成员函数complex operator-(complex c2);/-重载为成员函数void display()cout(real,imag)endl;/输出复数private:/私有数据成员double real;/复数实部double imag;/复数虚部;63数 据 结 构 与 算 法 分 析complex complex:operator+(complex c2)/重载函数实现complex c;c.real=c2.real+real;c.imag=c2.imag+imag;return complex(c.real,c.imag);64数 据 结 构 与 算 法 分 析complex complex:operator-(complex c2)/重载函数实现complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return complex(c.real,c.imag);65数 据 结 构 与 算 法 分 析int main()/主函数 complex c1(5,4),c2(2,10),c3;/声明复数类的对象coutc1=;c1.display();coutc2=;c2.display();c3=c1-c2;/使用重载运算符完成复数减法coutc3=c1-c2=;c3.display();c3=c1+c2;/使用重载运算符完成复数加法coutc3=c1+c2=;c3.display();66数 据 结 构 与 算 法 分 析程序输出的结果为:c1=(5,4)c2=(2,10)c3=c1-c2=(3,-6)c3=c1+c2=(7,14)67数 据 结 构 与 算 法 分 析继承中的一个问题继承中的一个问题v长方形的面积:Area=W*H;v正方形的面积:Area=L*L;v正方形从长方形继承而来,显然就有了两个同名但操作两个同名但操作并不相同并不相同的求面积的成员函数,当计算正方形面积时,怎么样才能准确调用正方形派生类中的函数呢?长方形长方形rectangle正方形正方形square继承数 据 结 构 与 算 法 分 析#includeclass Point public:Point(double i,double j)x=i;y=j;double Area()const return 0.0;private:double x,y;class Rectangle:public Point public:Rectangle(double i,double j,double k,double l);double Area()const return w*h;private:double w,h;数 据 结 构 与 算 法 分 析Rectangle:Rectangle(double i,double j,double k,double l):Point(i,j)w=k;h=l;void fun(Point&s)/&s用到了引用 coutArea=s.Area()endl;int main()Rectangle rec(3.0,5.2,15.0,25.0);fun(rec);运行结果:Area=0数 据 结 构 与 算 法 分 析虚函数虚函数v虚函数(Virtual):若某类中的一个成员函数被说明为虚函数,就意味着成员函数在派生类中可能存在着不同的实现v在类的声明中,在函数原型之前写virtualvVirtual 函数类型 函数名(形参表)函数体vvirtual 只用来说明类声明中的原型,不能用在函数实现时。数 据 结 构 与 算 法 分 析虚函数虚函数v具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。v本质:不是重载声明而是覆盖。v调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数数 据 结 构 与 算 法 分 析#includeclass Point public:Point(double i,double j)x=i;y=j;virtual double Area()const return 0.0;/virtual:虚函数 private:double x,y;class Rectangle:public Point public:Rectangle(double i,double j,double k,double l);virtual double Area()const return w*h;/virtual:虚函数 private:double w,h;/其他函数同上例数 据 结 构 与 算 法 分 析vvoid fun(Point&s)vcoutArea=s.Area()a)a=b;if(ca)a=c;return a;模板(template)double max(float a,float b,float c)if(ba)a=b;if(ca)a=c;return a;这两个重载的函数,有很多相同的代码,能不能充分利用这些相同的代码?提高软件的开发效率数 据 结 构 与 算 法 分 析函数模板函数模板v函数模板可以用来创建一个通用功能的函数,以支持多种不同的形参,简化重载函数的函数体设计。v函数模版定义形式为:template函数定义数 据 结 构 与 算 法 分 析函数函数模板(template)template T max(T a,T b,T c)if(ba)a=b;if(ca)a=c;return a;max就是就是函数模板函数模板Void main()int a1=10,a2=15,a3=20;double a1=1.5,a2=5.5,a3=2.3;max(a1,b1,c1)max(a2,b2,c2)编译器从调用max()时实参的类型自动推导出函数模板的类型参数。实际执行:int max(int a,int b,int c)double max(float a,float b,float c)数 据 结 构 与 算 法 分 析类模板类模板v同样,使用类模板使用户为类声明一种模式,使得类中某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意类型,提高代码使用率。v类模板声明如下:template 类说明注意:模板类的成员函数必须是函数模板v模板类建立对象时,声明形式如下:类模板名 对象名1,对象名2数 据 结 构 与 算 法 分 析类模板(template)178264131829PiglEeyoRooChriKanPootTigg二叉树:由结点组成,每一个节点包括值及其深度,以及下一级左右节点的位置。数 据 结 构 与 算 法 分 析class string_BTnode public:private:string val;int cnt;string_BTnode *lchild;string_BTnode *rchild;class int_BTnode public:private:int val;int cnt;int_BTnode *lchild;int_BTnode *rchild;template class BTnode public:private:valType val;int cnt;int_BTnode *lchild;int_BTnode *rchild;valType可以被任意设定来建立对象可以被任意设定来建立对象,如如BTnode bti;或或 BTnode bts;BTnode就就是是类模板类模板

    注意事项

    本文(《c与c的区别》PPT课件.ppt)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开