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

    第 5 章(1)━━类与对象.ppt

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

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

    第 5 章(1)━━类与对象.ppt

    C+程序设计程序设计第第5章章(1)类与对象类与对象1主要内容主要内容l面向过程的程序设计面向过程的程序设计l面向对象的程序设计面向对象的程序设计抽象性、封装性、继承性、多态性抽象性、封装性、继承性、多态性l类的概念类的概念l类的定义类的定义l对象的定义对象的定义l对象的使用对象的使用2面向过程的程序设计面向过程的程序设计l面向过程的结构化程序设计:面向过程的结构化程序设计:思想:思想:使用使用“自顶向下,逐步求精自顶向下,逐步求精”的方法,对功能进行分解,即将复杂的问题逐的方法,对功能进行分解,即将复杂的问题逐层分解,形成一个个功能模块,再逐一进行处理。层分解,形成一个个功能模块,再逐一进行处理。方法:方法:一个函数实现一个功能。使用函数来实现对数据的操作,着重点放在一个函数实现一个功能。使用函数来实现对数据的操作,着重点放在“怎样怎样实现实现”的细节过程上,且往往把描述某一事物的数据与对数据进行操作的函数分开。的细节过程上,且往往把描述某一事物的数据与对数据进行操作的函数分开。形式:形式:主模块主模块+若干个功能模块若干个功能模块 (main()函数函数+若干个函数若干个函数)l缺点:缺点:当描述事物的数据结构发生变化时,处理这些数据的函数也随之重新设计或当描述事物的数据结构发生变化时,处理这些数据的函数也随之重新设计或修改,程序可重用性差,且修改函数往往会影响程序的其他部分,导致牵一发而动修改,程序可重用性差,且修改函数往往会影响程序的其他部分,导致牵一发而动全身。维护性差成了制约结构化程序设计应用的全身。维护性差成了制约结构化程序设计应用的“瓶颈瓶颈”。对于较小规模的程序,。对于较小规模的程序,可用面向过程的方法,详细描述每一瞬间的数据结构以及对其的操作过程,而对于可用面向过程的方法,详细描述每一瞬间的数据结构以及对其的操作过程,而对于较大规模的程序,就显得力不从心了。较大规模的程序,就显得力不从心了。3面向对象的程序设计面向对象的程序设计l面向对象的程序设计:面向对象的程序设计:思想:思想:现实世界是由各种各样的对象组成,对象有其属性和行为,对象之间通过信息现实世界是由各种各样的对象组成,对象有其属性和行为,对象之间通过信息传递相互作用。面向对象的程序设计就是用计算机逻辑来描述、模拟现实世界的存传递相互作用。面向对象的程序设计就是用计算机逻辑来描述、模拟现实世界的存在,并处理现实问题在,并处理现实问题。方法:方法:程序设计围绕对象进行,其核心是从现实问题中抽象出合适的对象,通过概括、程序设计围绕对象进行,其核心是从现实问题中抽象出合适的对象,通过概括、分类、抽象,将描述某一类对象的数据和处理这些数据的函数封装成一个整体,从分类、抽象,将描述某一类对象的数据和处理这些数据的函数封装成一个整体,从而构成一个类,而对象就是类的一个实例。而构成一个类,而对象就是类的一个实例。特点:特点:抽象性、封装性、继承性、多态性抽象性、封装性、继承性、多态性实体实体抽象类别抽象类别抽象抽象客观世界客观世界主观世界主观世界现现实实世世界界映射映射对象对象类类抽象抽象计计算算机机世世界界实例化实例化4面向对象的程序设计面向对象的程序设计抽象性抽象性l抽象:抽象:是对具体的某一类对象(问题)进行概括,分析出这一类对象的公共性质并是对具体的某一类对象(问题)进行概括,分析出这一类对象的公共性质并加以描述的过程。抽象时先着重问题的本质及描述,其次才是实现的过程及细节。加以描述的过程。抽象时先着重问题的本质及描述,其次才是实现的过程及细节。l方法:方法:数据抽象:描述某一类对象的属性或状态(对象之间相互区别的物理量)。数据抽象:描述某一类对象的属性或状态(对象之间相互区别的物理量)。代码抽象:描述某一类对象所共有的行为特征或具有的功能。代码抽象:描述某一类对象所共有的行为特征或具有的功能。l抽象的实现:抽象的实现:通过类的声明。通过类的声明。【例】【例】抽象实例抽象实例钟表钟表数据抽象:数据抽象:int hour;int minute;int second;代码抽象:代码抽象:settime();showtime();抽象抽象的实现的实现钟表钟表类类 class Clock private:int hour;int minute;int second;public:void settime(int h,int m,int s);void showtime();5面向对象的程序设计面向对象的程序设计封装性封装性l封装封装与信息隐蔽:与信息隐蔽:封装是将某一类对象的数据成员、代码成员(函数成员)结合在封装是将某一类对象的数据成员、代码成员(函数成员)结合在一起,形成一个基本单位。封装时,将其中的某些部分对外隐蔽,即隐蔽其内部细一起,形成一个基本单位。封装时,将其中的某些部分对外隐蔽,即隐蔽其内部细节,留下少量接口,以便与外界联系,接收外界消息,信息隐蔽有利于数据安全。节,留下少量接口,以便与外界联系,接收外界消息,信息隐蔽有利于数据安全。l目的:目的:封装增强了数据的安全性,也简化了编程。类一旦建立,就可作为一个整体封装增强了数据的安全性,也简化了编程。类一旦建立,就可作为一个整体单元来使用,使用者不必了解具体的实现细节,只需要通过外部接口,以特定的访单元来使用,使用者不必了解具体的实现细节,只需要通过外部接口,以特定的访问权限,来使用类的成员。问权限,来使用类的成员。l封装的实现:封装的实现:在类声明中用一对大花括号在类声明中用一对大花括号“”将类中的数据成员、函数成员封装将类中的数据成员、函数成员封装成一个整体,并对其成员设置访问权限。成一个整体,并对其成员设置访问权限。【例】【例】封装封装钟表钟表类类 class Clock private:int hour,minute,second;public:void settime(int h,int m,int s);void showtime();边界边界指定访问权限指定访问权限外部接口函数外部接口函数6面向对象的程序设计面向对象的程序设计继承性继承性l继承与派生:继承与派生:继承是继承是C+中支持层次分类的一种机制,使用者可以很方便的利用已有中支持层次分类的一种机制,使用者可以很方便的利用已有的类来建立一个新的类,即在保持原有类特性的基础上派生出新的类,并增加新的的类来建立一个新的类,即在保持原有类特性的基础上派生出新的类,并增加新的属性和行为。原有的类称为基类,由它派生出来的新类称为子类或派生类,而子类属性和行为。原有的类称为基类,由它派生出来的新类称为子类或派生类,而子类还可以继续派生它的子类,如此下去,可以形成派生树(继承树)。还可以继续派生它的子类,如此下去,可以形成派生树(继承树)。l目的:目的:继承重用了已有软件中的有用部分,简化了编程,实现了继承重用了已有软件中的有用部分,简化了编程,实现了“软件重用软件重用”。l继承的实现:继承的实现:通过声明派生类。通过声明派生类。【例】【例】面包车类面包车类汽车类汽车类卡车类卡车类小汽车类小汽车类轿车类轿车类工具车类工具车类旅行车类旅行车类7面向对象的程序设计面向对象的程序设计多态性多态性l多态现象:多态现象:当向几个相似但不完全相同的对象发送同一个消息时,它们反映各不相当向几个相似但不完全相同的对象发送同一个消息时,它们反映各不相同,分别执行不同的操作,即同样的一个消息被不同的对象接受时产生不同的结果,同,分别执行不同的操作,即同样的一个消息被不同的对象接受时产生不同的结果,这种情况就是多态现象。这种情况就是多态现象。l面向过程程序设计中的多态性:面向过程程序设计中的多态性:指用相同的函数名,定义多个相似但功能不同的函指用相同的函数名,定义多个相似但功能不同的函数,即通过重载函数的方式,实现数,即通过重载函数的方式,实现“同一名称,不同功能同一名称,不同功能”。l面向对象程序设计中的多态性:面向对象程序设计中的多态性:指在具有继承关系的类体系中,由继承而产生的相指在具有继承关系的类体系中,由继承而产生的相关但不同的类,其对象对同一个消息会做出不同的响应,产生不同的结果,即通过关但不同的类,其对象对同一个消息会做出不同的响应,产生不同的结果,即通过继承和虚函数的方式,实现继承和虚函数的方式,实现“同一接口,多种方法同一接口,多种方法”。l目的:目的:增加程序的灵活性、通用性。增加程序的灵活性、通用性。l静态多态的实现:静态多态的实现:重载函数、重载运算符重载函数、重载运算符l动态多态的实现:动态多态的实现:继承继承+虚函数虚函数8类的概念类的概念l关于类:关于类:类是具有相同属性和行为的某一类对象的抽象描述,其内部包括该类对象所共有的属类是具有相同属性和行为的某一类对象的抽象描述,其内部包括该类对象所共有的属性(数据)和行为(函数)。性(数据)和行为(函数)。类中定义的属性(数据)和行为(函数)称为类的成员,即类是由数据成员和函数成类中定义的属性(数据)和行为(函数)称为类的成员,即类是由数据成员和函数成员两个部分组成。员两个部分组成。类属于构造数据类型,它既包含描述事物的数据,又包含处理这些数据的函数。类属于构造数据类型,它既包含描述事物的数据,又包含处理这些数据的函数。类类型的变量称为对象,即类被作为样板来建立对象,对象是类的具体实例。类是抽类类型的变量称为对象,即类被作为样板来建立对象,对象是类的具体实例。类是抽象的,对象是具体的。象的,对象是具体的。要建立对象,必须先定义类。要建立对象,必须先定义类。9类的定义类的定义l类的定义类的定义:class 类名类名 private 类型类型 成员名成员名11;public 类型类型 成员名成员名21;protected 类型类型 成员名成员名31;/此处分号不可缺少此处分号不可缺少l几点说明:几点说明:类名:类名:按标识符命名规则命名。按标识符命名规则命名。注意:注意:类是一种构造的数据类型,定义一个类,就是类是一种构造的数据类型,定义一个类,就是定义该类中的成员数据和成员函数,编译系统不为任何数据类型分配存储空间,当定义该类中的成员数据和成员函数,编译系统不为任何数据类型分配存储空间,当然也不为类分配存储空间!然也不为类分配存储空间!10类的定义类的定义 成员数据:成员数据:花括号中依次列出组成该类的各个成员数据,并对各成员数据进行类型声花括号中依次列出组成该类的各个成员数据,并对各成员数据进行类型声明,其类型可以是明,其类型可以是C+中任意基本数据类型,也可以是已定义的构造数据类型。中任意基本数据类型,也可以是已定义的构造数据类型。注意:注意:声明成员数据时,不能指定其存储类型为:声明成员数据时,不能指定其存储类型为:auto、register、extern,因为系统并因为系统并不为类分配存储空间,但可以指定成员数据的存储类型为不为类分配存储空间,但可以指定成员数据的存储类型为 static,关于类中关于类中 static 静态成员数据的作用本章后续介绍。声明成员数据时,也静态成员数据的作用本章后续介绍。声明成员数据时,也不能对其初始化。不能对其初始化。成员函数:成员函数:花括号中依次列出组成该类的各个成员函数的声明,花括号中依次列出组成该类的各个成员函数的声明,声明时应注意:声明时应注意:可以在类中只对成员函数作原型声明,而在类外给出成员函数的具体实现,即在类可以在类中只对成员函数作原型声明,而在类外给出成员函数的具体实现,即在类外对成员函数作定义性声明,定义时必须在成员函数名前面加上类名和外对成员函数作定义性声明,定义时必须在成员函数名前面加上类名和“:”(域(域运算符),指明该成员函数是属于哪一个类的。运算符),指明该成员函数是属于哪一个类的。也可以在类中对成员函数作定义性声明,即给出函数体,形成内联成员函数。也可以在类中对成员函数作定义性声明,即给出函数体,形成内联成员函数。在类中,成员函数允许声明为重载函数,也可以是带有默认形参值的函数。在类中,成员函数允许声明为重载函数,也可以是带有默认形参值的函数。11【例】【例】(定义时钟类,定义时钟类,类外给出成员函数的具体实现类外给出成员函数的具体实现)class Clock public:void settime(int h,int m,int s );/成员函数的原型声明成员函数的原型声明void showtime();/成员函数的原型声明成员函数的原型声明 private:int hour,minute,second;void Clock:settime(int h,int m,int s )/类外,成员函数的定义性声明类外,成员函数的定义性声明 hour=h;minute=m;second=s;void Clock:showtime()/类外,成员函数的定义性声明类外,成员函数的定义性声明 cout hour “:”minute “:”second endl;【例】例】(定义时钟类,定义时钟类,类中给出成员函数的定义性声明类中给出成员函数的定义性声明)class Clock public:void settime(int h,int m,int s )/类中,成员函数的定义性声明类中,成员函数的定义性声明 hour=h;minute=m;second=s;void showtime()/类中,成员函数的定义性声明类中,成员函数的定义性声明 cout hour “:”minute “:”second endl;private:int hour,minute,second;12类的定义类的定义 访问权限:访问权限:私有访问权限(私有访问权限(private):):在在 private 后面声明后面声明的成员数据和成员函数的成员数据和成员函数,只允许本类只允许本类中的成员函数访问,而中的成员函数访问,而任何任何类外的函数均不能访问。若在类体的起始处声明私有成类外的函数均不能访问。若在类体的起始处声明私有成员,员,关键字关键字 private 可以可以省略省略不写不写。公有访问权限(公有访问权限(public):):在在 public 后面声明后面声明的的成员数据和成员函数成员数据和成员函数,是类与外部,是类与外部的接口,任何的接口,任何类类外外的的函数都可以访问函数都可以访问类中的类中的 public 成员,即类中和类外均可访问。成员,即类中和类外均可访问。保护访问权限(保护访问权限(protected):):在在 protected 后面声明后面声明的的成员数据和成员函数成员数据和成员函数,与与 private 类似,其区别表现在继承与派生时对派生类的影响不同,而类似,其区别表现在继承与派生时对派生类的影响不同,而 protected 成员成员允许被本类以及本类的派生类的成员函数访问,而不允许被其它类外的函数访问。允许被本类以及本类的派生类的成员函数访问,而不允许被其它类外的函数访问。13类的定义类的定义 在定义一个类时,对成员指定访问权限的原则是:在定义一个类时,对成员指定访问权限的原则是:若该成员仅限于本类的成员函数使用,应指定为私有;若该成员仅限于本类的成员函数使用,应指定为私有;若允许在类外使用本类中的该成员,应指定为公有;若允许在类外使用本类中的该成员,应指定为公有;实际使用时,成员数据一般指定为私有,成员函数一般指定为公有。实际使用时,成员数据一般指定为私有,成员函数一般指定为公有。成员数据和成员函数的声明位置任意,建议将成员数据集中在类体的前面,成员函数成员数据和成员函数的声明位置任意,建议将成员数据集中在类体的前面,成员函数集中在类体的后面。无论类中成员声明的位置如何,成员函数都可以直接访问本类集中在类体的后面。无论类中成员声明的位置如何,成员函数都可以直接访问本类中的任一成员,包括成员数据和成员函数。中的任一成员,包括成员数据和成员函数。类和结构体类型的作用基本相同,区别在于:在类中,其成员的缺省访问权限是私有类和结构体类型的作用基本相同,区别在于:在类中,其成员的缺省访问权限是私有的;而在结构体类型中,其成员的缺省访问权限是共有的。的;而在结构体类型中,其成员的缺省访问权限是共有的。14【例】【例】(定义三角形结构体类型(定义三角形结构体类型)#include#include struct Triangle private:float x,y,z,area;public:void setside(float a,float b,float c )if(a+bc&a+cb&b+ca )x=a;y=b;z=c;float t=(a+b+c)/2;area=sqrt(t*(t-a)*(t-b)*(t-c);else x=y=z=area=0;void print()cout “三角形的三边长:三角形的三边长:”;cout x “、”y “、”z “tt面积:面积:”area endl;void main()Triangle t1,t2;t1.setside(3,4,5);t1.print();t2.setside(7,8,9);t2.print();运行:运行:三角形的三边长:三角形的三边长:3 、4、5 面积:面积:6三角形的三边长:三角形的三边长:7 、8、9 面积:面积:26.8328 15【例】【例】(定义三角形类(定义三角形类)#include#include class Triangle float x,y,z,area;public:void setside(float a,float b,float c )if(a+bc&a+cb&b+ca )x=a;y=b;z=c;float t=(a+b+c)/2;area=sqrt(t*(t-a)*(t-b)*(t-c);else x=y=z=area=0;void print()cout “三角形的三边长:三角形的三边长:”;cout x “、”y “、”z “tt面积:面积:”area 成员名成员名【例】【例】Triangle t;t.setside(3,4,5 );t.x=3,t.y=4,t.z=5;Triangle t,&tt=t;tt.setside(3,4,5 );tt.x=3,tt.y=4,tt.z=5;Triangle t,*p=&t;p-setside(3,4,5 );p-x=3,p-y=4,p-z=5;20【例】【例】(定义矩形类(定义矩形类)分析:一个矩形可用两个点来描述:左上角分析:一个矩形可用两个点来描述:左上角(left,top)、右下角右下角(right,bottom)#include#include class Rectangle private:float left,top,right,bottom;public:void set(float,float,float,float );void get(float&,float&,float&,float&);void print();void Rectangle:set(float L,float T,float R,float B )left=L;top=T;right=R;bottom=B;void Rectangle:get(float&L,float&T,float&R,float&B )L=left;T=top;R=right;B=bottom;void Rectangle:print()cout “面积面积=”fabs(right-left)*fabs(bottom-top)endl;21void main()Rectangle r1,r2;float a,b,c,d;cout a b;cout c d;r1.set(a,b,c,d);cout “矩形的两个坐标点:矩形的两个坐标点:n”;cout “左上角左上角(”a “,”b “)tt右下角右下角(”c “,”d “)n”;r1.print();r2.set(10,20,30,40);r2.get(a,b,c,d);cout “矩形的两个坐标点:矩形的两个坐标点:n”;cout “左上角左上角(”a “,”b “)tt右下角右下角(”c “,”d “)n”;r2.print();运行:运行:请输入矩形的左上角请输入矩形的左上角(a,b)坐标:坐标:1 2 请输入矩形的右下角请输入矩形的右下角(c,d)坐标:坐标:3 4 矩形的两个坐标点:矩形的两个坐标点:左上角左上角(1,2)右下角右下角(3,4)面积:面积:4矩形的两个坐标点:矩形的两个坐标点:左上角左上角(10,20)右下角右下角(30,40)面积:面积:400 22对象的使用对象的使用l对象使用的几点说明:对象使用的几点说明:对象与一般变量一样,可以作为函数的参数,同样类也可以作为函数返回值类型。对象与一般变量一样,可以作为函数的参数,同样类也可以作为函数返回值类型。同类对象之间可以相互赋值,这种赋值等同于各个成员数据的依次赋值,且同类对象之间可以相互赋值,这种赋值等同于各个成员数据的依次赋值,且这种赋值这种赋值与成员数据的访问权限无关与成员数据的访问权限无关。【例】【例】当访问一个对象的成员函数时,称为向该对象发送一个消息。当访问一个对象的成员函数时,称为向该对象发送一个消息。在类外只能访问对象的在类外只能访问对象的公有成员,不能访问对象的私有成员或保护成员,若要在类外访问对象的私有成员,公有成员,不能访问对象的私有成员或保护成员,若要在类外访问对象的私有成员,只能通过该对象的公有成员函数来间接访问。只能通过该对象的公有成员函数来间接访问。【例】【例】Triangle t1,t2;t1.setside(3,4,5 );t2=t1;t2.print();Triangle t;t.x=3,t.y=4,t.z=5;t.setside(3,4,5 );cout t.x t t.y t t.z endl;t.print();23

    注意事项

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

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




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

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

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

    收起
    展开