版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 类和对象,数据封装,C+语言与C语言最大的不同,在于 C+语言增加了面向对象的概念。 C+语言允许用户定义新的抽象数据类型。,类类型,将一组数据和对它们的相 关操作封装在一起,实现的是面向 对象中的核心概念: 数据封装;,3.1 类 与 对 象,3.1.1 类的定义 定义用户定义的类型Date ,考虑对该类型数据的操作,可能有: struct Date int d,m,y; void init_date(Date ,函数和数据类型之间没有联系,因此,需要操作一个Date数据时,需要Date类型的参数。 C+语言允许在结构类型定义中,加入函数的定义,这些函数的目的,也是要操作某个结构的变
2、量。,该结构更复杂定义为:,struct Date int day,month,year; void init_date(int d,int m,int y); Date add_year(int n); ;,在C+语言中,抽象数据类型更一般的形式为: class className attributes; / data members; operations; / member functions; ; /注意这个分号的存在 称为类类型的定义,它定义了一个新类型。Class_name是类名,也就是该类型的类型名。,class Date int day,month,year; void ini
3、t_date(int d,int m,int y); Date add_year(int n); ;,一个类类型中可以有两种成员:数据和操作。在C+中称它们为: 数据成员 成员函数,C+不允许在声明数据成员时进行初始化 class aclass int num=0; /错误 ;,成员函数,与一般的函数一样,具有:函数名、参数列表、返回值。 不过有些特殊的成员函数可能没有返回类型。没有返回类型指的是函数声明前不能加任何的类型说明,包括void,这与函数没有返回值是不同的。,(1)在类中定义成员函数,class Date private : int day, month, year; public
4、: void InitDate (int d ,int m,int y) day=d; month=m; year=y; ;,(2)在类外定义成员函数,在类中声明成员函数,在类外定义成员函数的格式为: 返回类型 类名: 函数名(参数列表) ,class Date private : int day, month, year; public: void InitDate (int d ,int m,int y); ;,void Date:InitDate (int d ,int m,int y) day=d; month=m; year=y; ,3.1.2 访问控制,一个类类型中可以有两种成员:
5、数据和操作。在C+中称它们为数据成员和成员函数。 根据它们的被访问权限,成员又可以分为私有段成员、保护段成员和公有段成员。,class 类名 private: /定义私有段成员 私有段数据和函数定义; public: /定义公有段成员 公有段数据和函数定义; ;,其中,类名是一个标识符,代表类类型的类型名;private、public称为段约束 符,其中private可以缺省(即没有被段约束符说明的成员就是私有段成员);,在一个类中,可以被外部访问的部分 被定义在public段中。这些成员被称 为公有成员。不能被外部访问的部分 被定义在private段或protected段中, 分别称为私有成
6、员和受保护的成员。,一个类外部的函数或者其他的类只能访问这个类的公有成员(有例外)。其他成员是访问函数或类不能“看见”的(invisible) ,也就是不能直接访问的(inaccessable)。, 以内的部分 称为类内; 以外的部分称为类外。,一个类的定义实现了数据封装:类外不可见:(即封装起来的部分) 私有段数据 私有段函数原型 私有段函数和公有段函数的实现,类外可见:类向外提供部分 公有段数据 公有段函数原型,24,class Date private : int day, month, year; / 类外不可访问 public: void InitDate(int d, int m,
7、 int y); /类外可访问 void AddYear(int year); void AddMonth(int month); void AddDay(int day); ;,定义公有和私有成员的顺序可以是任意的。,数据封装是一个相对的概念,只 是对于类外而言。而对于类内部 所有的成员都是相互可见的。,27,3.1.3 类和对象的关系,类只是一种形式化的定义,要使用类提 供的功能,必须使用类的实例,即对象, 一个类可以定义多个对象,而对象要占 据一定的内存空间。每个对象都包含类 中定义的各个数据成员的存储空间,共 享类中定义的成员函数。,28,类和对象的关系就像整型和变量的关系。 int
8、i; Date d;,不同的类对象拥有自己的数据成员,而共享函数成员的代码。一个例子:,30,class Circle private: intx; inty; float fRadius;,public: void SetXY(int a,int b); void SetRadius(float r); void Move(int newx,int newy); ;,一个类应该包括哪些数据成员,可以从两个方面考虑:所有这个类的对象都应该有什么属性;每一个具体的该类的对象应该包括哪些属性。,如对圆的考虑,所有的圆都应该有圆心和半径两个属性;每一个具体的圆应该包括自己的圆心和半径。,class
9、Circle int x; int y; float radius; public: void set_xy_r(int a,int b,float r); void move(int newx,int newy);;,所有的圆的对象具有自己的圆心和半径,而共享所有对圆的操作。,类与对象的关系就类似于整数类型 int 与整型变量的关系。类和整数类型 int代表的是一般的概念,对象和整型变量代表的是具体的实例。,类代表了一组对象的共同性;对象代表了具体的性质。,类在概念上是一种抽象机制,它抽象了一类对象的存储和操作特性。,在系统实现中,类是一 种共享机制,它提供了一类对象共享其类的操作实现。,类
10、是一种封装机制,它将一组数据和对该组数据的操作封装在一起。,类是对象的模型,对象承袭了类中的数据和方法(操作)。只是各实例对象的数据初始化状态和各个数据成员的值不同。,3.1.4 类外访问成员的方法,类外访问成员的方法为: 对象.公有成员函数名(实参表) 对象.公有数据,或定义一个指向对象的指针来访问公有段的成员。方式为: 指针-公有成员函数(实参表) 指针-公有数据,或者 (*指针).公有成员函数(实参表) (* 指针).公有段的数据,class Date private: int day,month,year; public: void init(int d,int m,int y); v
11、oid show( ); ;,void Date:init(int d,int m,int y) day=d; month=m; year=y; ,void Date:show() coutyear-month- dayendl; ,void main() Date today; today.init(25,3,2011); today.show( ); Date *p; p= ,在一个成员函数内部(函数体内),不需要显示指明访问的数据是哪个对象的,虽然一个类类型的所有对象都具有该类类型中定义的所有数据,但成员函数能够“知道”它在操作的数据属于激活该函数的那个对象。,注意:,数据封装是一个相对
12、的概念,只是对于类外而言,而对于类内,所有成员都是互相可见的。一个类的成员函数的实现,可以在类内完成,也可以放在类外实现,但函数本身仍然是类内的函数。,在类中定义的函数,自动默认为内联函数。 类外实现的函数,不是内联函数。内外可以在原型前加上inline,使之成为内联函数。,如:,inline void Date: init_date( int dd,int mm,int yy) d=dd; m=mm; y=yy; ,通过使用类的公有段成员来访问这个类。因此,类的公有段成员(公有段数据和公有段成员 函数的函数原型)提供了类的外部界面,而私有段成员以及所有段成员函数的实现细节(函数体部分)则由类
13、封装起来,让类的使用者看不到。,在C+语言中,私有数据只能严格通过成员函数访问,任何类外(除了友元)对私有数据的访问都是非法的。使用私有数据这一语言特性来隐藏由类对象操纵的数据;,然后提供一些成员函数来访问这些数据,但隐藏了改变这些数据的能力和实现细节。这样,使得类对数据的描述和类提供给外部世界来处理数据的界面这两件事互相独立,这就给出了面向对象的重要性。,一个类的重要性在于它对外部世界的一组对象描述了同一界面 ,至于怎样去实现这些功能,仅仅是类内部关心的事。各个对象通过该界面完成各项功能。,3.2 静 态 成 员,关键字static(表示静态的)可以用于说明一个类的成员(包括数据成员和成员函
14、数),称它们为static成员。,(1)静态数据成员,在一个类中,若将一个数据说明前加上static,则该数据称为静态数据,static数据成员被该类的所有对象共享。无论建立多少个该类的对象,都只有一个静态数据的存储空间。,类的static数据成员必须在类外进行定义,方式为: type 类名:static成员;,类的static数据成员若要初始化,在类外定义该static数据成员时进行。 定义且初始化的方式为: type 类名:static成员=初值;,static数据成员属于类,而不属于对象;static数据成员也分为公有和私有的;在类外只能 访问公有的static数据成员,且访问方式为:
15、类名:static公有数据成员,在类内可以访问所有的static数据成员,采用直接访问方式。,class counter static int count; public: void set(int num) count=num; void show( ) coutcount; ;,int counter:count=0; void main( ) counter a,b; a.show(); b.show(); a.set(10); a.show(); b.show(); /coutcounter:countendl; ,成员函数也能被说明为静态的。与静态数据 成员一样,静态成员函数属于类而
16、不是某个 类对象。 因此,在类外调用一个公有静态成 员函数,不需要指明对象或指向对象的指针。 其访问方式为: 类名:静态公有成员函数名(参数列表),66,(2)静态成员函数,一般使用静态成员函数来访问静态数据成员; 若在静态成员函数中要访问非静态成员时, 必 须明确指出该静态成员函数在哪个对象上操作, 必须要有限定词(即需要通过对象或指向对象的 指针进行),一般也就需要类类型作静态成员函 数的参数类型(除非是使用全局对象)。,#include class integer private: int a; static int b; public: static void set(int n1,i
17、nt n2,integer ,int integer:b=0; void integer: set(int n1,int n2,integer ,void main() integer obj1; integer:set(1,2,obj1); obj1.set(3,4,obj1); ,3.1.6 C+的类,C+语言的类共有三种方式:class类、struct类和union类。 1 class类 class类是C+语言中最典型的抽象数据类型。,1) class类的一般形式,class类名 private: 私有段数据及函数; public: 公有段数据及函数; ;,2) 无名类:,没有类名的类称为无名类。 class global; 无名类只能定义一个对象。,3)空类: class empty ; 空类没有任何成员,包括数据和函数。空类可以定义多个对象,各个对象具有不同的地址。,2 类与结构,在C+中,结构是另外一种形式的类。C+中的结构也可以包括数据和成员函数。C+ +的结构和类的差别在于缺省时,类的成员是私有的,而结构的成员是公有的。,除此以外, 类与结构有完全相同
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年东航实业集团陕西分公司招聘(8人)笔试历年备考题库附带答案详解
- 2025山东烟台市蓬莱区城市建设投资集团有限公司招聘22人笔试历年典型考点题库附带答案详解
- 2025山东东营众邦人力资源有限责任公司招聘43人笔试历年典型考点题库附带答案详解
- 2025-2026学年110米栏教案
- 2025四川绵阳绵州酒店有限公司招聘客户经理等勤杂岗位31人笔试历年常考点试题专练附带答案详解
- 2025吉林省矿业集团有限责任公司遴选31人笔试历年典型考点题库附带答案详解
- 2026年新生儿特殊用药计算方法试卷
- 校园信息安全防护技术方案
- 2025-2026学年ERP教学设计模板
- 2025-2026学年稚子弄冰教学设计作业
- 无创机械通气护理
- 新版人教版七年级英语下册第三单元Unit 3 单元教材分析(大单元整体设计)
- 《毽球》教学大纲
- 2024年中考道法一轮复习:成长的节拍(练习)(解析版)
- 涡轮托盘I组孔加工与毛坯输运机械系统设计任务书
- 2024年常州工业职业技术学院单招职业技能测试题库附答案
- 人教版九年级语文上册期末考试卷带答案
- 江西科学技术出版社六年级下册信息科技教案-
- 重症医学科普知识宣传
- 中国联通通信网络运行维护规程-动力环境分册
- 加严检验一次抽样方案
评论
0/150
提交评论