第8章类和对象

上传人:沈*** 文档编号:243955014 上传时间:2024-10-01 格式:PPT 页数:36 大小:302.50KB
返回 下载 相关 举报
第8章类和对象_第1页
第1页 / 共36页
第8章类和对象_第2页
第2页 / 共36页
第8章类和对象_第3页
第3页 / 共36页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第8章 类和对象,8.1,面向对象程序设计方法概述,8.2 类的声明和对象的定义,8.3 类的成员函数,8.4 对象成员的引用,8.5 类的封装性和信息隐蔽,8.6 类和对象的简单应用举例,8.1 面向对象程序设计方法概述,1.对象,object,2.,封装与信息隐蔽,encapsulation,imformation hiding,3.,抽象,abstraction,4.,继承与重用,inherit,reusability,5.,多态性,polymorphism,8.2,类的声明和对象的定义,类和对象的关系,每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型。,在,C+,中对象的类型称为类(,class)。,类代表了某一批对象的共性和特征。前面已说明:类是对象的抽象,而对象是类的具体实例(,instance)。,正如同结构体类型和结构体变量的关系一样,人们先声明一个结构体类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量在,C+,中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。,类是抽象的,不占用内存,而对象是具体的,占用存储空间。在一开始时弄清对象和类的关系是十分重要的。,类是一个集合,对象是集合的元素。,声明类类型(重点),class,类名,private,:,私有的数据和成员函数;,public,:,公用的数据和成员函数;,;,class,Student,private,:,int,num;,char,name20,sex;,public,:,void,display(),cout,num:,numendl;,cout,name:,nameendl;,cout,sex:,sexendl;,;,#define,PI 3.1415,class,Circle,private,:,double,radius;,public,:,void,SetRadius(,double,r)radius=r;,double,area(),return,radius*radius*PI;,;,定义对象的方法,只要声明了一个类类型,就可以用这个类类型名来定义类对象,定义方法类似于结构体类型变量的定义。,class,Student,private,:,int,num;,char,name20,sex;,public,:,void,display(),cout,num:,numendl;,cout,name:,nameendl;,cout,sex:,sexendl;,;,Student stu1,;,但是,Student stu2=,1002,ZhouYuncai,m,;,是不合法的!,类对象的定义与结构体变量的定义唯一区别就在于变量的初始化!,结构体变量的定义的回顾,1,、在声明结构体类型的同时定义结构体变量,struct,Date,int,month,day,year;,d;,这时,,Date,是一个结构体类型名,,d,是一个,Date,类型的变量。,2,、先声明结构体类型,后定义结构体变量,struct,Date,int,month,day,year;,;,Date,d;/,这时,,Date,是一个结构体类型名,,d,是一个,Date,类型的变量。,3,、在定义结构体变量时还可以对其进行初始化,struct,Date,int,month,day,year;,d1=12,1,2008;,Date,d2=11,2,2008;,类对象的定义,也可以有两种:,1,)在声明类类型的同时定义类对象;,2,)先生明类类型,后定义类对象。,如何才能使得类对象可以初始化?,如果不能对类对象初始化,如何给类对象赋初值?,class,Student,private,:,int,num;,char,name20,sex;,public,:,void,display(),cout,num:,numendl;,cout,name:,nameendl;,cout,sex:,sexendl;,;,public,:,Student stu2=,1002,ZhouYuncai,m,;,构造函数,匿名类类型,结构体中也可以有函数,#include,using,namespace,std;,struct,Date,int,month,day,year;,void,showdate(),coutyear(month10?,:0,:,:,)month,(day10?,:0,:,:,)dayendl;,;,int,main(),Date d=12,3,2008;,d.showdate();,return,0;,2008:12:03,struct,与,class,的区别,struct,与,class,的唯一区别是用,struct,声明的类型中的成员或成员函数的默认可访问权限是,public,,而用,class,声明的类型中的成员或成员函数的默认可访问权限是,private,的。,关于,public,、,private,以及,protected,严格地讲,用,struct,或,class,声明类型时,每一个成员或成员函数的前面都应该加一个修饰词,public,:、,private,:或者,protected,:。,类似于:,public,:,int,a;,private,:,double,b;,protected,:,void,setData();,等,这三个关键词用于说明类类型对象的成员或者成员函数的访问权限,何谓访问权限?,关于,public,、,private,以及,protected,何谓访问权限?,类对象的成员和成员函数的访问方式与结构体类型变量的成员访问方式相同,格式为:,对象名,.,成员,/,成员函数,;,但是,如果一个成员或者成员函数的前面加了修饰词,private,或者,protected,,则就不能用对象名进行访问!,class,CTest,private,:,int,a;,public,:,double,b;,;,CTest obj;,obj.b=23.45;,/OK,obj.a=45;,/ERROR,private,与,protected,的区别要等到学了继承之后才能讨论!,8.3 类的成员函数,成员函数的性质,类的成员函数(简称类函数)是函数的一种,它的用法和作用和第4章介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为,private,(,私有的)、,public,(,公用的)或,protected,(,受保护的)。在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。例如私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用。,在类外调用时,一般要定义一个类对象,然后利用类对象调用类函数。,成员函数可以访问本类中任何成员(包括私有的和公用的),也可以调用本类中的任何函数。可以引用在本作用域中有效的数据。,一般的做法是将需要被外界调用的成员函数指定为,public,,,它们是类的对外接口。但应注意,并非要求把所有成员函数都指定为,public,。,有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为,private,。,这种函数的作用是支持其他函数的操作,是类中其他成员的工具函数(,utility function),,类外用户不能调用这些私有的工具函数。类的成员函数是类体中十分重要的部分。也可以没有成员函数。,在类外定义成员函数,#include,#include,using,namespace,std;,class,Student,public,:,void,display();,void,set(,int,n,string str,char,ch);,private,:,int,num;,string name;,char,sex;,;,int,main(),Student obj;,obj.set(10031,ZhouYuncai,M,);,obj.display();,void,Student:display(),cout,学好,:,numendl;,cout,姓名,:,nameendl;,cout,性别,:,sexhour=12;,p-minute=50;,p-second=34;,8.5 类的封装性和信息隐蔽,公用接口与私有实现的分离,从前面的介绍已知:,C+,通过类来实现封装性,把数据和与这些数据有关的操作封装在一个类中,或者说,类的作用是把数据和算法封装在用户声明的抽象数据类型中。,在声明了一个类以后,用户主要是通过调用公用的成员函数来实现类提供的功能(例如对数据成员设置值,显示数据成员的值,对数据进行加工等)。因此,公用成员函数是用户使用类的公用接口(,public interface),,或者说是类的对外接口。,当然并不一定要把所有成员函数都指定为,public,(,公用)的,也可以指定为,private,或,protected,的,这时这些成员函数就不是公用接口了。,在类外虽然不能直接访问私有数据成员,但可以通过调用公用成员函数来引用甚至修改私有数据成员。用户可以调用公用成员函数来实现某些功能,而这些功能是在声明类时已指定的,用户可以使用它们而不应改变它们。实际上用户往往并不关心这些功能是如何实现的细节,而只需知道调用哪个函数会得到什么结果,能实现什么功能即可。,通过成员函数对数据成员进行操作称为类的实现,为了防止用户任意修改公用成员函数,改变对数据进行的操作,往往不让用户看到公用成员函数的源代码,显然更不能修改它,用户只能接触到公用成员函数的目标代码,.,可以看到:类中被操作的数据是私有的,实现的细节对用户是隐蔽的,这种实现称为私有实现(,private,implementation)。,这种“类的公用接口与私有实现的分离”形成了,信息隐蔽,。,软件工程的一个最基本的原则就是将接口与实现分离,信息隐蔽是软件工程中一个非常重要的概念。它的好处在于:,(1)如果想修改或扩充类的功能,只需修改本类中有关的数据成员和与它有关的成员函数,程序中类外的部分可以不必修改。,(2)如果在编译时发现类中的数据读写有错,不必检查整个程序,只需检查本类中访问这些数据的少数成员函数。,类的声明与实现的分离,/student.h(,这是头文件,在此文件中进行类的声明,),class,Student,/,类声明,public,:,void,display();,/,公用成员函数原型声明,private,:,int,num;,char,name20;,char,sex;,;,/student.cpp/,在此文件中进行函数的定义,#include,#include,student.h,/,不要漏写此行,否则编译通不过,using,namespace,std;,void,Student,display(),/,在类外定义,display,类函数,cout,num:,numendl;,cout,name:,nameendl;,cout,sex:,sext1.hour;,/,输入设定的时间,cint1.minute;,cint1.sec;,coutt1.hour,:,t1.minute,:,t1.secendl;,return,0;,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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