CPP课件第2章类和对象

上传人:E**** 文档编号:91278292 上传时间:2019-06-27 格式:PPT 页数:61 大小:248.50KB
返回 下载 相关 举报
CPP课件第2章类和对象_第1页
第1页 / 共61页
CPP课件第2章类和对象_第2页
第2页 / 共61页
CPP课件第2章类和对象_第3页
第3页 / 共61页
CPP课件第2章类和对象_第4页
第4页 / 共61页
CPP课件第2章类和对象_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《CPP课件第2章类和对象》由会员分享,可在线阅读,更多相关《CPP课件第2章类和对象(61页珍藏版)》请在金锄头文库上搜索。

1、C+面向对象程序设计教学内容,第1章 C+概述 第2章 类和对象 第3章 面向对象程序设计概述 第4章 进一步学习类和对象 第5章 堆与复制构造函数 第6章 继承性:派生类 第7章 运算符重载 第8章 虚函数和多态性 第9章 模板 第10章 类库和C+的标准模板库STL 第11章 输入输出流 第12章 异常处理,第2章 类和对象,2.1 类和对象的定义 2.2 构造函数和析构函数 2.3 类与const,对象和类,属于同一个类的所有对象具有某些共性和相似的特征。一个类定义了一组大体上相似的对象。 在面向对象的软件系统中,对象是基本的运行时实体,它既包含数据,也包括作用于这些数据的操作。,对象,

2、对象的组成,操作代码,数据,面向对象的软件系统,对象4,对象1,对象3,对象2,2.1 类和对象的定义,2.1.1 C+中对结构的扩展 2.1.2 C+中类的定义 2.1.3 C+类中的成员函数定义 2.1.4 C+中对象的定义和使用 2.1.5 C+中类的接口与实现 2.1.6 类声明与类定义 2.1.7 结构struct与类class的比较,2.1.1 C+中对结构的扩展,C+中的结构不仅可以包含不同类型的数据,而且还可以包含函数。 结构中的数据和函数都是结构的成员,分别称为数据成员和函数成员。 在C+中,通常把函数成员称为成员函数。,C的结构体struct与C+的struct的比较,成员

3、函数,数据成员,2.1.2 C+中类的定义,在C+语言中,我们通过定义新的数据类型来实现类。 类既包含数据内容又包含对数据的操作,所以类是一个抽象数据类型。 在C+语言中,类可被视为一种用户定义的类型。,C +的结构体struct与C+的class的比较,成员函数,数据成员,一个复数结构的例子,struct complex double real; double image; void init(double r,double i) real=r; image=i; double realcomplex() return real; ; ;,成员函数,数据成员,私有成员和公有成员,在C+ 中一

4、个结构的成员通常分为两类: 私有成员( private )和公有成员( public ) 私有成员只能被该结构中的其他成员访问。 公有成员既可以被结构内的其他成员访问,也可以被结构外的成员所访问。 C+规定,在缺省情况下,结构中的成员是公有的。 此处所指成员包括数据成员和成员函数。,私有成员和公有成员的声明,struct complex private: double real; double image; public: void init(double r,double i) real=r; image=i; double realcomplex( ) return real; ; ;,私

5、有成员,公有成员,类的定义,class 类名 private: 私有数据成员和成员函数 public: 公有数据成员和成员函数 ; /分号是不能少的 /其中,class是声明类的关键字 /类名是要声明的类的名字,类中私有成员和公有成员的声明,class complex private: double real; double image; public: void init(double r,double i) real=r; image=i; double realcomplex() return real; ; ;,私有成员,公有成员,定义类时的注意事项,private和public可以按

6、任意顺序出现 具有良好习惯的程序员会: 把所有私有成员和公有成员归类放在一起 将私有成员放在公有成员的前面 private、public和protected称为访问控制符。 数据成员可以是任何数据类型,但不能用auto、register或extern进行说明。 只有在类对象定义之后才能给数据成员赋初值。,为什么要用类代替结构?,在缺省情况下 ,类中的成员是私有的private。 类提供了缺省的安全性。,2.1.3 C+类中的成员函数定义,C+类中的成员函数描述了对类对象内部数据的操作方法,或者说,描述了对象的行为,因此我们又将成员函数称为方法(method)或者服务(service)。 【例2

7、.2】学生类中成员函数的定义。,成员函数的定义包含在类体中,class Student private: int number; char name15; float score; public: void init(int number1,char *name1,float score1); void modify(float score1) scorescore1; void print( ); ;,成员函数在类体外定义,void Student:init(int number1,char *name1,float score1) 作用域解析运算符 number=number1; strc

8、py(name,name1); score=score1; void Student:print( ) cout”number: ” number” name:”name ” score: ”scoren; ,成员函数在类体内外的区别,一般情况下,在类体中仅给出成员函数的原型,而把成员函数的定义放在类体之外实现。 这种将类的成员函数的声明(declaration)和定义(definition)进行分离的方式有很多好处 类体内定义的成员函数在编译时是以内联函数处理的, 只有那些非常简短的函数才在类体中直接定义。,2.1.4 C+中对象的定义和使用,在C+语言中,类是用户定义的一种新类型,所以可以

9、象声明普通变量一样来建立对象。 在C+语言中,类与对象的关系就好象整型int 和整型变量i 之间的关系一样。 注意:所有类对象都共享它们的成员函数,但是,每一个对象都建立并保持自己的数据。对象的数据成员,在C+中称为实例变量。,创建对象的方法之一,在定义类时同时创建对象,例如: class date int month,day,year; public: void setdate(int,int,int); void print( ); int getyear( ); int getmonth( ); int getday( ); tt; / 同时创建对象tt。,创建对象的方法之二,在定义类后

10、在创建对象,例如: Data date1,date2;,对象的使用,对象的性质和定义要求将实例变量隐藏在对象中,对它们的访问,原则上要通过其接口共有的成员函数来进行。访问对象的成员时,使用“.”运算符: 对象名.成员名称; 调用成员函数是必须指明对象,事实上,在C+语言中,我们用OOP术语发送消息来代替“调用成员函数”这个说法。,2.1.5 C+中类的接口与实现,一般把仅含函数原型的类声明部分称为类的接口(interface),例如: class Date int day, month, year; public: void init (int dd,int mm,int yy); /init

11、ialize void add_year(int n); / add n years void add_month(int n); / add n months void add_day(int n); / add n days ,C+中类的接口与实现(续),把类中成员函数的定义部分称为类的实现部分(implementation)。例如: void Date:init(int dd, int mm, int yy) day = dd; month = mm; year = yy; inline void Date:add_year(int n) year += n; ,C+中类的接口与实现(续

12、),C+中的类实现了接口和实现的分离,这样只要维持接口不变,实现部分可以根据需要不断改进,而不影响类的使用。 类的接口部分一般存放在扩展名为h的头文件中,类的实现部分则存放在扩展名为cpp的实现文件中。在cpp文件的开头要用include将h头文件包含在其中。 这个特征增强了类模块的独立性和可重用性(reuse)。,设计一个类(class)时的基本原则,在设计一个新的类(class)类型时的基本原则是将类的复杂的实现细节(例如用来存储该类对象的数据)和正确使用该类所需知道的要素(例如访问对象数据的函数)分离开来。 这种分离的最好方式就是通过一个特定的接口来使用该类的数据结构和内部处理程序。,封

13、装(encapsulation),在进行类定义时,我们把需要提供给类的用户的在类对象上执行的操作声明为公用的(public),这样就形成了类的接口。 然后按照信息隐藏(information hiding )的原则来把类的内部数据表示和实现细节声明为私有的(private),从而完成了封装(encapsulation)。,封装性及其好处,所谓封装,在面向对象程序设计中的含义就是包含和隐藏对象信息,如内部数据结构和代码的能力。 在C+中封装是通过类来实现的,即将内部的数据和代码声明为私有的,外界不能直接访问。 封装将操作对象的内部复杂性与应用程序的其他部分隔离开来。 换句话说,应用类对象的程序员

14、不需要知道类内部的实现细节就可以使用该类。这是面向对象程序设计降低复杂性的最主要途径。,2.1.6 类声明与类定义,类定义包含两部分:类头和类体,类体由一对花括号包围起来。一旦到了类体的结尾,即结束右边的花括号,这时就定义了一个类 。 一旦定义了一个类,则该类的所有成员就都是已知的,类的大小也是已知的了。,类声明,由于历史的原因,类的定义(class definition)也称为类的声明(declaration)。 但是准确地说,一旦给出了类头,就声明了一个类。我们可以声明一个类但是不定义它。 例如: class Date;/ Date类的声明 这个声明向程序引入了一个名字Date,指示Dat

15、e为一个类类型。,类声明(续),如果还没有定义类,那么我们就不能定义这类类型的对象 但是,我们可以声明指向这种类型对象的指针或者引用。 class Date; / Date类的声明 Date pd, / 声明了指向Date类对象的指针pd和引用rd,2.1.7 结构struct与类class的比较,结构和类的唯一区别是: 在缺省情况下结构内数据成员和成员函数是公有的public,而类中的数据成员和成员函数是私有的private。 可以说C+中的结构是一种特殊的类。 类(或者结构)的私有成员只能被该类(或者结构)的成员函数访问,这是C+实现封装的一种方法。,2.2 构造函数和析构函数,2.2.1

16、 构造函数 2.2.2 析构函数 2.2.3 重载构造函数 2.2.4 组合类和对象成员的初始化,2.2.1 构造函数 constructor,构造函数是类的一种特殊成员函数,用来为对象进行初始化 。 构造函数的函数名与类名相同。,构造函数的例子1,class Date int day, month, year; Date(int dd, int mm, int yy) ; / / constructor ; /构造函数名与类名相同 void Date:Date(int dd, int mm, int yy) day = dd; month = mm; year = yy; ,用来为对象进行初始化 。,构造函数的例子2,class Student private: int numb

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号