欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C程序设计02章类与对象.ppt

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

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

    C程序设计02章类与对象.ppt

    第2章 C+的面向对象基础,2.1 概述,在现实生活中,对象通常是有形的(如一个人、一辆车),但也可以是无形的(如一项计划、一件事情)。总之,对象是对客观世界中各种事物集合的抽象描述。它具有两方面的特征:静态特征(如人的身高、体重、年龄、性别)和动态特征(琴棋书画、能歌善舞),前者表示对象的属性,后者表示对象的功能。,1)C+不仅扩充了C面向过程的功能;2)还增加了面向对象的功能:这使C产生了质的飞跃,具有了新的生命力!也使C+成为了能够适应面向对象程序设计的现代大型语言,并在众多语言中脱颖而出。,二、对象(Object)的概念1.现实生活中对象的概念:,一、C+在C的成功基础上又进行了一场实质性的革命,2.程序设计中的对象概念:,数 据,操作代码,对象,面向对象的程序设计方法,实际上就是将现实生活中对象的概念应用到了程序设计领域。它的基本点是尽可能地按照人类认识世界的方法和思维方式来分析和解决问题。把要研究的事、物、概念等都称为对象,以对象为基本元素,作为分析和解决问题的核心。,程序设计中的对象概念也包括两方面的特征:数据(对应“属性”)和操作(对应“功能”),如下图所示:,其中的数据我们称为数据成员(data member),操作我们称为成员函数(member function)。,类(class):类是一批事物的共性与特性的抽象。对象(object):前面我们讲的“对象”是一种程序设计的思想,是相对于面向过程的程序设计思想而言的。这里要讲的“对象”是一个具体的实例(instance),它含有描述这个实例的具体数据以及与这些数据有关的操作。这里的“对象”是相对于“类”而言的。类与对象的相互关系:类是对象的抽象,而对象是类的具体实例。例如 类:首都对象:北京、东京、华盛顿、莫斯科 类:人对象:张三、李四、王五,(一个国家的最高政权机关所在地,是全国的政治中心),(能制造工具并使用工具进行劳动的高等动物),2.2 类和对象,C+中的类:在具体的C+程序设计中,类是用来定义对象的一种抽象数据类型,或者说它是生产对象的模板。它的性质和我们以前所讲的其它数据类型(如整型、实型、枚举类型、结构体类型等)相同。C+中类的使用:用于定义对象。先定义一个“类”类型,然后用它去定义若干个同类型的对象。对象就是一个“类”类型的变量。例如:先定义一个“首都”类:一个国家的政治中心。然后用这个类去定义具体的首都对象:如北京、东京,华盛顿、莫斯科等。,在C+中定义一个“类”类型的方法和定义一个结构体类型的方法是相似的。1、结构体类型和结构体变量的定义 struct student int num;char name10 char sex;struct student student 1,student2;以上结构体变量只包含了数据(变量),没有包含对数据进行处理的任何操作。若需要对数据进行处理,则必须另外编写有关的操作语句。,定义“类”的方法是由定义结构体类型的方法演变而来的。它除了包含数据部分,还包含了对这些数据的操作部分。Stud是一个类名,其首字母约定用大写字母表示,以示与对象名的区别。,2、类和对象的定义 class Stud/注意关键字class int num;/char name 10;/char sex;/以上三行是数据成员(data member)void display()/以下是成员函数(member function)cout”num:”numendl;cout”name:”nameendl;cout”sex:”sexendl;/;Stud stud 1,stud2;/此处定义了stud类的两个对象,#include#include class Stud private:/声明以下部分为私有的 int num;char name10;char sex;public:/声明以下部分为公有的 void init(int number,char string,char c)num=number;strcpy(name,string);sex=c;void display()cout”num:”numendl;cout”name:”nameendl;cout”sex:”sexendl;/;Stud stud1,stud2;/定义了stud类的两个对象,3、类的成员分类:是根据对成员的访问控制(access control)方式来划分的,它包括三类:私有的(private),不能被外界访问;保护的(protected),也不能被外界访问;公有的(public),外界可以访问。,下面来使用上面所定义的类:void main()Stud student1,student2;student1.num=1;/外界不能访问num成员,因为它是私有的 strcpy(student2.name,“LiLin”);/同上 student1.init(1,”XiaoWang”,M);/正确 student2.init(2,”LiLin”,F);/正确 student1.display();student2.display();/演示程序:P345.cpp,说明:1)像上面这种,以可被使用或不可被使用的访问控制方式来对类中的每一个成员进行限定,这叫做类的“封装性”(encapsulation)。2)在类的定义中,如果不指定成员的访问控制,则系统默认为它是私有的。只有对象中的函数才能引用本对象中的私有数据成员。,4、对象程序设计中几个名词的介绍:方法(method):类中的成员函数也称为“方法”,方法是对数据的操作。一个方法对应一种操作。消息(message):外界要激活一个对象中的方法是通过发出消息来实现的。所谓“消息”,其实就是一个命令,由程序语句来实现。例如:要输出对象student1中的学号、姓名、性别这些信息,就可以通过在程序中执行以下语句来实现:student1.display();另外,只有对象中被定义为public的方法(成员函数)才能被对象外界所激活。,3)从理论上讲,三个段(private,protected,public)中的成员既可以是数据成员,也可以是成员函数。但是,从类的数据封装性要求出发,一般是把数据成员定义在private段,不允许外界使用;成员函数定义在public段,用来提供类与外界的接口;而保护段成员的定义主要是从父类对派生类的访问控制来考虑的(将在后面详解)。,5、类类型定义的一般形式:class 类名 private:私有的数据成员和成员函数;protected:保护的数据成员和成员函数;public:公有的数据成员和成员函数;,6、C+中的结构体类型和共用体类型 在C+中,允许在定义的结构体和共用体类型中包含成员函数,也就是可以用struct和union来定义一个像类一样的类型。C+中的结构体和公用体与类的区别是:在类(class)定义中,默认情况下的成员为private,而结构体(struct)和共用体(union)为public。,7、C+中对象的存储问题(补充)由类所产生的对象是一个类的具体实例,它要占据相应的存储空间,那系统是如何存储一个对象的呢?我们知道,类包括数据成员和成员函数两部分,那相应的对象也包含了这两部分,但是,这两部分的存储方法是不同的:一、对数据成员的存储方法与结构体相似。比如:,class Stud private:int num;char name10;char sex;public:void init(int number,char string,char c)num=number;strcpy(name,string);sex=c;void display()cout”num:”numendl;cout”name:”nameendl;cout”sex:”sexendl;Stud stud1,stud2;,二、对成员函数的存储方法与C语言中函数的存储方法相似,只是被编译器改了个名称,并增加了个this指针。比如:上例中的init成员函数存储在代码区,被改为:,void stud:init(int number,char string,char c,stud*this)this-num=number;strcpy(this-name,string);this-sex=c;,这样,当你在程序中调用:stud1.init(10010,”LiMin”,F);stud2.init(10011,”ZhangYang”,M);时,编译器又会将他们对应地改为:,stud:init(10010,”LiMin”,F,(stud*),可见,在系统中每个成员函数只有一份,所有同类的不同对象都调用同一份成员函数。而同类的不同对象却具有不同的数据成员空间。,2.3 构造函数和析构函数,1、构造函数作用:对象是现实世界中某一实体的表达,因此,一旦建立对象,该对象就应该有一个有意义的初值。在C+中,建立和初始化对象的任务是专门由该类的构造函数来完成的。这个函数很特殊,只要一建立对象,它就马上被调用,完成给对象分配存储空间和进行初始化。2、构造函数的使用:用户可以自己定义一个构造函数,构造函数的名字必须与类名相同,以便系统能够识别它,把它作为构造函数。,2.3.1 构造函数(constructor),#include#includevoid main()class stud/定义类stud private:int num;char name10;char sex;public:stud()/定义构造函数,函数名与类名相同 num=10010;strcp(name,”wang_li”);sex=F;void display()/定义成员函数,输出对象的数据 cout“num:”numendl;cout“name:”nameendl;cout“sex:”sexendl;stud stud_l;/定义一个对象stud_1 stud_1.display();/从外界调用display函数,即向对象发出消息,class Stud private:int num;char name10;char sex;public:Stud();/声明了一个构造函数 void display()/定义成员函数 cout“num:”numendl;cout“name:”nameendl;cout“sex:”sexendl;Stud:Stud()/对前面声明的构造函数做出具体定义 num=10010;strcp(name,”wang_li”);sex=F;stud stud_l;,注意:把构造函数和其它成员函数放在外部定义时,其函数名前要加上“类名:”。因为在类定义的外部,可能有各种函数定义,为了区分成员与非成员函数,区分此类成员函数和彼类成员函数,所以加上“类名:”是必要的。,构造函数的定义可以放到类的外部,比如:,在建立对象时,系统会自动调用相应的构造函数,不需要用户发出任何“消息”来激活;而且,创建一个对象只能执行一次构造函数。构造函数一般声明为public,无返回类型(即:没有返回值,也不能在定义时加上 void类型声明)。可定义有参的构造函数。这可以实现,在对象创建时根据需要来初始化相应的数据成员。比如上面的构造函数可改为:,Stud:Stud(int n,char nam,char s)num=n;strcp(name,nam);sex=s;,则相应的对象定义应改为:,stud stud_l(10010,”Wang_li”,F);stud stud_2(10011,”Li_yang”,M);/使不同的对象具有了不同的初值stud_1.display();stud2.display();,构造函数可以重载,下面是两个重载的构造函数:stud()/无参构造函数,在构造函数中统一给数据赋初值 num=10010;strcpy(name,”wang_li”);sex=F;stud(int n,char nam,char s)/有参构造函数,由实参将值传给形参 num=n;strcpy(name,nam);sex=s;这样,在定义对象时就可以带实参或不带实参。比如:stud stud1;/不带实参,调用无参构造函数 stud stud2(10011,”zhang_fun”,m);/带实参,调用有参构造函数,2.3.2 默认构造函数(补充内容),关于构造函数的几点重要说明:1、C+规定,每个类必须至少要有一个构造函数,没有构造函数,就不能创建任何对象。2、在定义一个类时,如果一个构造函数也不提供,则C+编译系统会自动为其提供一个默认的构造函数,该构造函数是一个无参构造函数,它只负责创建对象,而不进行初始化(P348有误)。与变量定义相似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则该对象的位模式(即数据成员的每一位)全为0,否则,对象值是随机的。3、只要在定义类时为其提供了一个构造函数(不管它是有参的还是无参的),编译系统就不再为其提供默认构造函数了。因此,如果我们为类定义了一个有参的构造函数,还想要一个无参的构造函数,则还得必须自己定义。,例如:下面的代码只定义了一个有参的构造函数,面对创建无参对象,将不能正确地编译。#includeclass Student public:Student(char*pName)strcpy(name,pName);namesizeof(name)-1=0;protected:char name20;void main()Student noName;/error:企图调用无参构造函数创建对象,/但类定义中却没有与之匹配的构造函数。Student classmate(“Jenny”);/ok,要避免如下的错误,只需在此增加一个无参的构造函数便可:Student(),sizeof(name)测出的值为20;则此语句的作用是:避免因传递进来的字符串长度大于name数组的长度,引起结束标志的丢失。,2.3.3 析构函数(destructor),1、析构函数的作用:在创建一个对象时,构造函数除了要为对象本身(数据成员)分配相应的空间以外,还可能分配其它的资源,比如:在构造函数中打开一个文件,或者从堆中分配一片内存。所有这些资源在对象生命期结束之前必须被释放。这项任务是由专门的析构函数来完成的。当对象脱离其作用域时,系统会自动调用析构函数,“清理善后”工作。2、析构函数的使用:析构函数名也与类名相同,但要在函数名前面加一个波浪符,例如 stud(),以示区别于构造函数。析构函数也是一个特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也不能被重载。如果用户没有定义析构函数,编译系统会自动生成一个默认的析构函数,默认析构函数只释放对象本身所占用的空间,所以在许多简单的类中可以不必显式地写出析构函数。,比如:下面的代码定义了一个析构函数(补充内容)class XYZ public:XYZ(char nam)name=new char20;/分配一片堆空间 strcpy(name,nam)XYZ()delete name;/释放构造函数中开辟的堆空间 protected:char*name;XYZ abc(“Zhang_feng”);,例2.3:(P349)一个包含构造函数和析构函数的C+程序 将类的定义放在main函数之前,作用域为全局,这可使main函数变得更简练。#include#includeclass stud/定义一个类 private:int num;char name10;char sex;public:stud(int n,char nam,char s);/对构造函数的原型声明 stud();/对析构函数的原型声明 void display();/对成员函数display的原型声明;,stud:stud(int n,char nam,char s)/对构造函数的定义 num=n;strcpy(name,nam);sex=s;stud:stud()/对析构函数的定义 inline void stud:display()/对前面所声明的成员函数display的具体定义 cout“num:”numendl;cout“name:”nameendl;cout“sex:”sexendl;void main()stud studl(10010,”wang_li”,f),stud2(10011,”zhang_fun”,m);stud1.display();/输出学生1的成绩 stud2.display();/输出学生2的成绩,stud:display()是一个整体,说明这是stud类中的display函数。不能把stud:和display()分隔开。,

    注意事项

    本文(C程序设计02章类与对象.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开