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

    面向对象编程技术课件.ppt

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

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

    面向对象编程技术课件.ppt

    本章内容1序2面向对象思想概述3学习忠告学习高级语言的体会如何快速入手、掌握一门高级编程语言学习语言有捷径吗?探讨学习语言的探讨学习语言的一般过程与方法一般过程与方法?个人学习的成功之处快速切入一门语言一、序一、序课程学习目的课程学习目的1.开拓视野2.激发学习兴趣3.步入新境地?C程序员程序员C+程序员程序员关键是思关键是思想观念的想观念的转变转变一、序返返 回回二、面向对象编程语言概述二、面向对象编程语言概述1.对象概述对象概述2.面向对象与面向过程面向对象与面向过程3.结构化与非结构化结构化与非结构化4.事件驱动的执行机制事件驱动的执行机制5.软件复用软件复用寻找面向对象寻找面向对象编程语言与面编程语言与面向过程语言异向过程语言异同点同点返返 回回面向对象的现实渊源面向对象的现实渊源现实中的简化模现实中的简化模型型冯冯.诺依曼诺依曼计算机计算机遗传算遗传算法法神经网络神经网络谁来开这加飞谁来开这加飞机?机?1 对象概述对象概述对象及类类定义了对象特征以及对象外观和行为的模模板板。它刻划了一组具有共同特征共同特征的对象。对象是类的实例实例,现实世界的任意客观实体皆可视为对象。属性属性是对象的特征特征。每一类对象都有若干属性。方法方法是指控制对象动作行为行为的方式。每个对象的动作及行为都是由一些特定的“方法”控制的。返返 回回2 面向对象与面向过程面向对象与面向过程面向过程:面向过程:1.重点放在如何实现细节过程方面,将数据与函数分开。2.形式:主模块+若干个子模块(main()+子函数)。3.特点:自顶向下,逐步求精功能分解。4.缺点:效率低,是手工作坊式的编程返返 回回面向对象:面向对象:1.观点:自然界是由实体(对象)所组成。2.程序设计方法:使用面向对象的观点来描述模仿并处理现实问题。3.要求:高度概括、分类和抽象。4.面向对象目的:使用户既不需要懂得太多的计算机、也不需要懂太多的业务。是设计理念的转变是设计理念的转变面向对象的设计思想面向对象的设计思想抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有的功能。抽象的实现:通过类的定义。之抽象之抽象面向对象的设计思想面向对象的设计思想层层分类,使概念逐渐细化,即具体化。例如,生物分为动物和植物,动物又分为脊椎动物和无脊椎动物,脊椎动物包括哺乳动物,哺乳动物又分为猫、狗,等等之分类之分类面向对象的设计思想面向对象的设计思想将抽象出的数据成员、代码成员相结合,将它们视为一个整体。1.目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。2.实现封装:类定义中的 之封装之封装面向对象的设计思想面向对象的设计思想子类与父类1.子类继承父类所有的属性、方法,并可定义自己的特有属性与方法2.提高软件开发效率,为软件复用提供强有力的支持之继承之继承 3 结构化程序设计结构化程序设计 结构化程序设计的概念是荷兰学者Dijkstra首先提出,用三种基本的程序控制结构来编制程序,从而使程序具有好的结构 三种基本结构三种基本结构:1.顺序结构顺序结构2.选择结构选择结构3.循环结构循环结构消除消除GOTO语句语句返返 回回4 事件驱动事件驱动Windows下的应用程序的用户界面都是由窗体、菜单和控件等对象构成的,各个对象的动作以及对象之间的关联,完全取决于操作者所做的操作。(程序的运行并没有固定的顺序),这种工作模式叫事件或消息驱动方式。事件就是使某个对象进入活动状态(激活)的一种操作或动作。返返 回回5.软件复用软件复用传统程序设计方法在软件复用上的困难面向对象程序设计在类的基础上构造同类的对象(如实例化,继承),为软件在OOA及OOD上提供有力的支持返返 回回软件复用的范畴软件复用的范畴1.代码的复用代码的复用2.设计的复用设计的复用3.分析的复用分析的复用4.测试信息的复用测试信息的复用三、学习忠告1.把C+当成一门新的语言学习(和C没啥关系!真的。);2.不要被VC、BCB、BC、MC、TC等词汇所迷惑他们都是集成开发环境,而我们要学的是一门语言;3.不要放过任何一个看上去很简单的小编程问题他们往往并不那么简单,或者可以引伸出很多知识点;三、学习忠告4.会用Visual C+,并不说明你会C+;5.学class并不难,template、STL、generic programming也不过如此难的是长期坚持实践和不遗余力的博览群书;6.看Visual C+的书,是学不了C+语言的;7.浮躁的人容易说:XX语言不行了,应该学YY;是你自己不行了吧!?8.浮躁的人容易问:我到底该学什么;别问,学就对了;三、学习忠告9.浮躁的人容易问:XX有钱途吗;建议你去抢银行;10.浮躁的人容易说:我要中文版!我英文不行!不行?学呀!11.浮躁的人容易问:XX和YY哪个好;告诉你吧,都好只要你学就行;12.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;13.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;三、学习忠告14.学习编程最好的方法之一就是阅读源代码;15.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;16.别指望看第一遍书就能记住和掌握什么请看第二遍、第三遍;17.C+绝不是所谓的C的“扩充”如果C+一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;三、学习忠告18.学习编程的秘诀是:编程,编程,再编程;19.读完了Inside The C+Object Model以后再来认定自己是不是已经学会了C+;20.不要漏掉书中任何一个练习题请全部做完并记录下解题思路;21.既然决定了学C+,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;三、学习忠告22.既然决定了学C+,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;23.就让C+语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C+语言本身为主;24.决不要因为程序“很小”就不遵循某些你不熟练的规则好习惯是培养出来的,而不是一次记住的;25.每学到一个C+难点的时候,尝试着对别人讲解这个知识点并让他理解你能讲清楚才说明你真的理解了;三、学习忠告26.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;27.保存好你写过的所有的程序那是你最好的积累之一;28.请不要做浮躁的人;29.读完了Inside The C+Object Model以后再来认定自己是不是已经学会了C+;30.请热爱C+!返返 回回第三章第三章 函数函数函数的定义与使用内联函数带默认参数的函数函数重载函数模板使用C+系统函数本章的主本章的主要内容。要内容。第一节第一节 函数的定义与使用函数的定义与使用1.函数的分类函数的分类一、一、从从函数定义函数定义的角度看,分为库函数和用户定义函数两种。的角度看,分为库函数和用户定义函数两种。(1)库函数 由系统提供,调用前包含有该函数原型的头文件。在前面各章中用到printf、scanf 等函数均属此类。(2)用户定义函数 由用户按需要写的函数。不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明。第一节第一节 函数的定义与使用函数的定义与使用二、从二、从功能功能的角度分类。的角度分类。(1)有返回值函数 执行后将向调用者返回值。须在函函数数定定义义和和函函数数说说明明中中明明确确返返回回值值的类型。的类型。(2)无返回值函数无返回值函数 执行后不向调用者返回值。指定它的返回为“空类型”“void”。第一节第一节 函数的定义与使用函数的定义与使用三三、从从主主调调函函数数和和被被调调函函数数之之间间数数据据传传送送的的角角度度看看又又可可分分为为无无参函数和有参函数两种。参函数和有参函数两种。(1)无参函数 函数定义和说明及函数调用时均不带参数。主调函数和被调函数之间不进行参数传送。(2)有参函数 在函数定义及函数说明时都有参数,称为形式参数(形参)。在函数调用时须给出实际参数(实参),主调函数把实参传给形参。第一节第一节 函数的定义与使用函数的定义与使用2.函数的定义函数的定义 类型说明符 函数名()声明部分 /老格式 语句 例:int max(int x,int y)return(xy?x:y);void prt(char*strx)couty?x:y);.Main()Coutmax(3.5,7.9)endl;标准标准C中将返回值转换位整形中将返回值转换位整形返回值由返回值由return语句实现语句实现结果是结果是?2、嵌套调用:、嵌套调用:被调函数在执行的过程中又调用其它函数main()fa();.fb();fa().fb();.fb();.3、递归调用:、递归调用:函数直接或间接的调用自身如求 n!、汉诺塔 理解递归调用的实理解递归调用的实现过程现过程一个问题的递归可以分为“回退”和“递推”两个阶段。构成递归的条件1.递归结束条件及结束时的值;2.能用递归形式表示,并且递归向终止条件发展。4、传值与引用、传值与引用引用:引用:是某一变量(对象)的一个别名,对引用的操作与是某一变量(对象)的一个别名,对引用的操作与对变量直接操作完全一样。对变量直接操作完全一样。声明方法:声明方法:类型标识符类型标识符&引用名引用名=目标变量名目标变量名 例1:int a;int&ra=a;/定义引用ra,它是变量a的引用,即别名 关于引用:关于引用:1.&在此不是求地址运算,而是起标识作用2.类型标识符是指目标变量的类型3.声明引用时,必须同时对其进行初始化 关于引用:关于引用:4.引用声明后,不能再把该引用名作为其他变量名的别名5.对引用求地址,就是对目标变量求地址6.建立数组的引用:int a10,b23;int(&ar)10=a;int(&br)23=b;注意!注意!不同与指针不同与指针4、传值与引用、传值与引用重点重点:传值、引用、指针的区别引用的含义引用的含义int add(int x,int y)x=x+y;return x;int add(int*x,int y)*x=*x+y;return*x;int add(int&x,int y)x=x+y;return x;int a,b;Add(a,b);int a,b;int*p;p=&a;Add(p,b);int a,b;Add(a,b);调调用用返返 回回第二节第二节 内联函数内联函数目的:提高程序运行效率缺点:程序长度增大可以看成是宏内联函数格式 inline 函数定义说明:是否真正是内联函数由编译器决定。函数规模过大,编译器一般不作为内联函数处理 包含循环一般不当作内联函数例:例:inline int add(int x,int y)return x+y;返返 回回第三节第三节 带默认值参数的函数带默认值参数的函数定义定义:在函数定义时可以预先给出参数的默认值int sum_calc(int n,int i=1)int sum=0;int j;for(j=i;j=n;j+)sum+=j;return sum;注意:注意:1.默认的形参按自右到左的顺序定义 P802.在调用可以使用部分默认形参值例例:int add(int a=0,int b=2,int c=3,int d=4,int e=5)return(a+b+c+d+e);void main()coutadd(1)endl;coutadd(1,9)endl;coutadd(1,9,8)endl;coutadd(1,9,3,7)endl;coutadd()0?x:-x);float abs(float x)return(x0?x:-x);Double 函数模板定义template(typename 自定义表示符)函数定义 使用自定义表示符templatetypeT abs(typeT x)Return(X0?x:-x);或者用class T!模板的执行过程模板的执行过程程序实例:程序实例:#include iostream.htemplate/或者或者template typeT abs(typeT X)return(X0?X:-X);void main()int x=-9;coutabs(x)endl;返返 回回第五节第五节 C+系统函数系统函数类似类似C的库函数的库函数查阅查阅MSDN返返 回回第四章第四章 类与对象类与对象1类和对象类和对象2构造函数与析构函数构造函数与析构函数3面向对象的基本特点面向对象的基本特点4类的组合类的组合5前向引用说明前向引用说明6类模板类模板/以后介绍以后介绍7面向对象标记面向对象标记8要点回顾要点回顾认识事物的认识事物的规律:由简规律:由简单到复杂单到复杂!顺顺序体现第三版序体现第三版本改进了本改进了一、一、类与对象类与对象1.类概述类概述1.类是具有相同属性和行为的一组对象的抽象集合,为该类的全部对象提供了统一的抽象描述,包括属性和行为两个主要部分。2.利用类可以实现数据的封装、隐藏、继承与派生。3.利用类易于编写大型复杂程序,其模块化程度比C中采用函数更高。慢慢体会慢慢体会类是一种用户自定义类型,声明形式:class 类名 public:公有成员(外部接口)private:私有成员 protected:保护型成员2.类的定义:类的定义:时钟类的成员时钟类的成员(数据成员与函数成员声明)(数据成员与函数成员声明)class Clockprivate:int Hour,Minute,Second;public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();成员函数成员函数数据成员数据成员void Clock:SetTime(int NewH,int NewM,int NewS)Hour=NewH;Minute=NewM;Second=NewS;void Clock:ShowTime()coutHour:Minute:Second;时钟类的函数成员(定义部分时钟类的函数成员(定义部分)说明:1.关键字public后面声明公有类型成员 它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数2.关键字private后面声明私有类型成员 允许本类中的函数访问,类外部的任何函数都不能访问。紧跟在类名称的后面声明私有成员,关键字private可省略(不提倡)说明说明:3.保护类型与private类似,其差别表现在继承与派生时对派生类的影响不同,在第七章介绍。下页下页 例子例子class circle public:circle:circle(int r)radius=r;int area()return(int)3.14*radius*radius;void circle_prt()coutthe private radius is:radiusendl;private:int radius;void main()circle circle1(1),circle2(3);coutthe private radius is:circle1.radius成员名”方式访问 public 属性的成员返返 回回二、构造函数与析构函数二、构造函数与析构函数构造函数名与类名相同构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。在对象创建时由系统自动调用。如果程序中未声明,则系统自动产生出一个缺省形式的构造函数1.构造函数构造函数定义及使用定义及使用构造函数举例构造函数举例class circle public:int radius;int area();circle(int r);int area(int r);circle:circle(int r)radius=r;int circle:area()return(int)3.14*radius*radius;void main()circle circle1(5);coutthe circles area is;coutcircle1.area()endl;定义部分定义部分1.构造函数与类同名2.不能指定返回值类型不能指定返回值类型3.可以是重载函数4.可以是内联函数5.如无自定义构造函数,C+系统自动产生空的的构造函数6.如构造函数带有参数,则在定义对象时必须带上相同类型的实参7.通过定义类的实例对象,只分配数据成员空间,共享类的共享类的代码空间代码空间注意:注意:析构函数名:类名完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个缺省的析构函数。析构函数不带任何参数2.析构函数析构函数定义及使用定义及使用请关注后请关注后面的内容!面的内容!析构函数举例析构函数举例class Point public:Point(int xx,int yy);Point();/.其它函数原形 private:int X,int Y;包含:delete A delete B 注意注意1.命名方式2.一般类中设计有动态对象,则要设计析构函数3.析构函数不带任何参数课堂练习课堂练习(5分钟分钟):1.定义一个表述圆的类(数据成员和函数成员),并提供相应的方法2.定义一个表述人的类,(数据成员和函数成员),并提供相应的方法体会面向对象的编程的特点3.内联成员函数内联成员函数为了提高运行时的效率,对于较简单的函数可以声明为内联形式。内联函数体中不要有复杂结构(如循环语句和switch语句)。类中声明内联成员函数的方式:将函数体放在类的声明中。使用inline关键字。内联函数两种声明方式:显示与隐式隐式:直接定义在类主体内显示:定义在类主体外,用inline 说明请看请看 下页下页注意何时采用注意何时采用?class Point public:void Init(int initX,int initY)X=initX;Y=initY;int GetX()return X;int GetY()return Y;private:int X,Y;class Point public:void Init(int initX,int initY);int GetX(););int GetY(););private:int X,Y;inline void Point:Init(int initX,int initY)X=initX;Y=initY;inline int Point:GetX()return X;隐式:隐式:显式:显式:当构造函数的参数为自身类对象的引用参数为自身类对象的引用时,这个构造函数称为拷贝构造函数.拷贝构造函数的功能是用一个已有对象初始化一个正在建立的同类对象.4.拷贝构造函数拷贝构造函数已存在对象已存在对象新对象新对象克隆克隆拷贝构造函数在以下三种情况下会被调用:拷贝构造函数在以下三种情况下会被调用:当用类的一个对象去初始化该类的另一个对象时;如果函数的形参是类对象类对象,调用函数进行形参和实参结合时;如果函数的返回值返回值是类对象,函数调用完成返回完成返回时。何时需要何时需要它?它?定义:定义:class 类名 public:类名(形参);/构造函数 类名(类名类名&对象名对象名);/拷贝构造函数 .;类名:类名(类名&对象名)/拷贝构造函数的实现 函数体 Point a=a1;/拷贝构造函数 等价于等价于Point a(a1);/可以改成这种形式 Point:Point(Point&p)X=p.X;Y=p.Y;cout拷贝构造函数被调用endl;class Point public:Point(int xx=0,int yy=0)X=xx;Y=yy;Point(Point&p);int GetX()return X;int GetY()return Y;private:int X,Y;请看请看 下页下页当用类的一个对象去初始化该类的另一个对象时系统自动调用它实现拷贝赋值。void main(void)Point A(1,2);Point B(A);/拷贝构造函数被调用拷贝构造函数被调用 coutB.GetX()endl;情形之一情形之一 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。例如:void fun1(Point p)coutp.GetX()endl;void main()Point A(1,2);fun1(A);/调用拷贝构造函数调用拷贝构造函数 情形之二情形之二 当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:Point fun2()Point A(1,2);return A;/调用拷贝构造函数调用拷贝构造函数void main()Point B;B=fun2();情形之三情形之三要看明白书上要看明白书上的例子的例子返返 回回三、面向对象的基本特点三、面向对象的基本特点抽象抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有的功能。之抽象之抽象?如何实现抽象如何实现抽象通过类的定义。三、面向对象的设计思想三、面向对象的设计思想层层分类层层分类,使概念逐渐细化,即具体化。例如,生物分为动物和植物,动物又分为脊椎动物和无脊椎动物,脊椎动物包括哺乳动物,哺乳动物又分为猫、狗,等等之分类之分类回回 顾顾三、面向对象的设计思想三、面向对象的设计思想将抽象出的数据成员、代码成员相结合,将它们视为一个整体。1.增强安全性和简化编程,不必了解具体的实现细节,只需要通过外部接口,以特定的访问权限,来使用类的成员。2.实现封装:类定义中的 之封装之封装在设计者允许在设计者允许的权限下的权限下三、面向对象的设计思想三、面向对象的设计思想子类与父类1.子类继承父类所有的属性、方法,并可定义自己的特有属性与方法2.提高软件开发效率,为软件复用提供强有力的支持3.多种多种继承方式:公有、私有、保护;单继承、多继承之继承之继承三、面向对象的设计思想三、面向对象的设计思想之多态之多态定义:指类具有相似功能的不同函数使用同一个名称 来实现如:1.运算符重载 2.函数重载 3.虚函数 慢慢领会慢慢领会插入语学习复杂、严密的C+语法体系C+既考虑设计理念的先进性,又兼顾程序执行的效率!理解、领会、运用其中的优秀的面向对象程序设计、分析思想!返返 回回是否感觉有是否感觉有点烦!点烦!四、类的组合四、类的组合类中的成员数据是另一个类的对象类的对象可以在已有的抽象的基础上实现更复杂的抽象注意是对象注意是对象例例:class Point private:float x,y;/点的坐标 public:Point(float h,float v);/构造函数 float GetX(void);/取X坐标 float GetY(void);/取Y坐标 void Draw(void);/在(x,y)处画点;/.函数成员部分,略class Line private:point p1,p2;/线段的两个端点 public:Line(Point a,Point b);/构造函数 Void Draw(void);/画出线段;/.函数的实现略函数的实现略1.如何设计组合类的构造函数?如何设计组合类的构造函数?原则:原则:不仅要负责对本类中的基本类型成员数据赋初值,也要对对象成员初始化。声明形式:声明形式:类名:类名(形参,本类成员形参):内嵌对象1(参数),内嵌对象2(参数),.本类初始化 注意注意否则可能是否则可能是一个不确定一个不确定的值的值2.组合类的构造函数调用组合类的构造函数调用构造函数调用顺序:构造函数调用顺序:若调用缺省构造函数(即无形参的),则内嵌对象的初始化也将调用相应的缺省构造函数。内嵌对象的构造函数内嵌对象是客人;内嵌对象是客人;声明顺序声明顺序调用本类的构造函数调用本类的析构函数内嵌对象的析构函数构造:构造:析构:析构:穿衣服与穿衣服与脱衣服脱衣服class Point/Point类声明public:Point(int xx=0,int yy=0)X=xx;Y=yy;coutpoint 的构造函数被调用endl;Point(Point&p);int GetX()return X;int GetY()return Y;private:int X,Y;Point:Point(Point&p)/拷贝构造函数的实现X=p.X;Y=p.Y;coutPoint拷贝构造函数被调用endl;class Line/Line类的声明public:/外部接口Line(Point xp1,Point xp2);Line(Line&);double GetLen()return len;private:/私有数据成员Point p1,p2;/Point类的对象p1,p2double len;/组合类的构造函数Line:Line(Point xp1,Point xp2):p1(xp1),p2(xp2)coutLine构造函数被调用endl;double x=double(p1.GetX()-p2.GetX();double y=double(p1.GetY()-p2.GetY();len=sqrt(x*x+y*y);Line:Line(Line&Seg):p1(Seg.p1),p2(Seg.p2)coutLine拷贝构造函数被调用endl;len=Seg.len;/主函数void main()Point myp1(1,1),myp2(4,5);/建立Point类的对象Line line(myp1,myp2);/建立Line类的对象Line line2(line);/利用拷贝构造函数建立一个新对象coutThe length of the line is:;coutline.GetLen()endl;coutThe length of the line2 is:;coutline2.GetLen()endl;例例2:整体类整体类部部件件子子类类1部部件件子子类类2部部件件子子类类n代码框架代码框架class Whole/整体类整体类public:Whole();Whole(int i,int j,int k);Whole();void Print();private:Part one;Part two;int date;class Part /部件类部件类public:Part();Part(int i);Part();void Print();private:int val;下页定义整体类的构造函数下页定义整体类的构造函数Whole:Whole()date=0;Whole:Whole(int i,int j,int k):two(i),one(j),date(k)./.其它函数的实现略其它函数的实现略返返 回回五、前向引用声明五、前向引用声明类应该先声明,后使用如果需要在某个类的声明之前,引用该类,则应进行前向引用声明。前向引用声明只为程序引入一个标识符,没有具体定义,不能使用该类的具体细节(如对象)。具体参考教材P112113前向引用声明举例前向引用声明举例:class B;/前向引用声明前向引用声明class A public:void f(B b);class B public:void g(A a);返返 回回template 类声明六、类模板六、类模板 使用类模板使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括系统预定义的和用户自定义的)目的目的:格式:格式:template 函数模板定义比较比较书上的例子:请先阅读书上的例子:请先阅读5minsstruct studentint id;float gpa;template class store private:T item;int havevalue;int flag;public:store(void);T getelem(void);void putelem(T x);templatestore:store():havevalue(1),flag(99)templateT store:getelem(void)if(havevalue=0)coutno item present!endl;exit(0);elsecoutthe havevalue is:havevalueendl;coutthe flag is:flagendl;return item;这儿这儿构造函数定义时,初始化其它数据成员构造函数定义时,初始化其它数据成员可以改成可以改成class吗吗?返返 回回templatevoid store:putelem(T x)havevalue+;item=x;void main()student g=1000,23;stores1,s2;s1.putelem(3);s2.putelem(7);couts1.getelem()s2.getelem()endl;返返 回回class circle public:int havevalue;circle(int r);int area()return(int)3.14*radius*radius;void circle_prt()coutthe private radius is:radiusendl;private:int radius;circle:circle(int r):havevalue(3)radius=r;void main()circle circle1(1);circle*cp;cp=&circle1;couthavevalue=:“;cout circle1.havevalueendl;circle1.circle_prt();coutout by pointer:“;couthavevalueendl;coutout the private data”;coutcircle1.radiusradius;/error初始初始化化禁止访问禁止访问私有数据私有数据返回返回返回返回返返 回回七、面向对象标记七、面向对象标记两种方法两种方法 UML:统一建模语言 专业的面向对象建模语言,功能强大 较复杂 Coad/Yourdon 类图描述 简单明晰 难以描述成员的访问控制UML对象名对象名数据成员数据成员函数成员函数成员类名类名数据成员数据成员函数成员函数成员Coad/Yourdon消息消息继承包含返返 回回要要点点回回顾顾1.类与对象的概念2.基本类的定义与使用1.类定义的格式:class name 2.访问控制3.对象创建与撤销1.类内、类外的理解2.数据成员与函数成员的区别3.public 与private:公共接口与隐藏1.构造、析构函数:公有、无返回值2.拷贝构造函数3.组合类1.定义:类中内嵌对象?问:内嵌类的定义是组合类吗2.组合类构造与析构:调用顺序4.类模板1.设计思想:数据处理的通用性,参数化程序设计2.适用范围:普通数据类型、自定义数据类型、类3.注意事项:成员函数是模板函数、代码要通用返返 回回Class Apublic:int a,b,c;private:int x,y,z;返返 回回A a1,a2,a3;Class Apublic:int a,b,c;private:int x,y,z;公共接口公共接口内部数据,隐私内部数据,隐私返返 回回1.构造函数与析构函数的功能?2.默认构造函数:系统可以产生缺省的构造函数与析构函数3.构造函数可以重载,析构函数可以重载吗?返返 回回1.为什么需要拷贝构造函数?为什么需要拷贝构造函数?格式:格式:类名(类名&对象名)2.那些情形调用拷贝构造函数?那些情形调用拷贝构造函数?1.用同类对象初始化另一个对象2.用于对象参数传递3.函数的返回值是对象?如何理解返返 回回class outerpublic:int a;class inner public:int b;inner()coutrun the inner constructorendl;void show()coutthe data of inner is:bendl;inn;outer()coutrun the outer constructorendl;void show()coutthe data of outer is:aendl;void main()outer o1;o1.a=123;o1.inn.b=23;o1.show();o1.inn.show();返返 回回可以这样定义吗?可以这样定义吗?不提倡不提倡若调用缺省构造函数(即无形参的),则内嵌对象的初始化也将调用相应的缺省构造函数。内嵌对象的构造函数声明顺序声明顺序调用本类的构造函数调用本类的析构函数内嵌对象的析构函数构造:构造:析构:析构:?如何理解?如何理解返返 回回设计思想皆设计思想皆为参数化程为参数化程序设计序设计实现数据实现数据处理通用性处理通用性1、函数模板、函数模板:2、类模板:、类模板:问题:在函数模板中与类模板中能处理以类问题:在函数模板中与类模板中能处理以类为类型参数的通用数据吗?为类型参数的通用数据吗?返返 回回template 函数定义(内部使用函数定义(内部使用T)template 类定义类定义 请看下例:请看下例:class class_studentpublic:int id;float gpa;class_student(int a,float b)id=a;gpa=b;class_student();struct struct_student int id;float gpa;template class store private:T item;int havevalue;int flag;public:store(void);T getelem(void);void putelem(T x);templatevoid store:putelem(T x)havevalue+;item=x;这样做可以这样做可以吗?吗?Storecla_s1;storestr_s1;回答:回答:1.请大家一起请大家一起 看完例子寻找结论看完例子寻找结论2.无论是函数模板还是类模板,其基本目标是一致的,皆为能处理多种类型的数据,只不过一种实现的载体是函数,一种实现的载体是类实践去探讨,实践去探讨,领会!领会!单元自测(单元自测(45分钟)分钟)见见WORD 文档文档面向对象的现实渊源面向对象的现实渊源现实中的简化模现实中的简化模型型冯冯.诺依曼诺依曼计算机计算机遗传算遗传算法法神经网络神经网络谁来开这加飞谁来开这加飞机?机?跳跳 回回

    注意事项

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

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




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

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

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

    收起
    展开