第四章 类与对象_第1页
第四章 类与对象_第2页
第四章 类与对象_第3页
第四章 类与对象_第4页
第四章 类与对象_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第四章第四章 类与对象类与对象面向对象程序设计面向对象程序设计2本章主要内容本章主要内容l面向对象的思想面向对象的思想lOOP的基本特点的基本特点l类概念和声明类概念和声明l对象对象l构造函数构造函数l析构函数析构函数l内联成员函数内联成员函数l拷贝构造函数拷贝构造函数l类的组合类的组合面向对象程序设计3抽象实例抽象实例钟表钟表l数据抽象:数据抽象:int Hour, int Minute, int Secondl代码抽象:代码抽象:SetTime(), ShowTime()OOP的基本特点面向对象程序设计4抽象实例抽象实例人人l数据抽象:数据抽象: char name,char gende

2、r,int age,int idl代码抽象:代码抽象:生物属性角度: GetCloth(), Eat(), Step(),社会属性角度: Work(), Promote() ,OOP的基本特点面向对象程序设计5c+中的类中的类 类是具有相同类是具有相同属性属性和和行为行为的一组的一组对象的集合。对象的集合。 其内部包括其内部包括属性属性和和行为行为两个主要两个主要部分。部分。类 和 对 象面向对象程序设计6封装封装将抽象出的数据成员、代码成员相结将抽象出的数据成员、代码成员相结合,将它们视为一个整体。合,将它们视为一个整体。 目的是曾强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通

3、过外部接口,以特定的访问权限,来使用类的成员。(电脑管理工具、维修) 实现封装:类声明中的 OOP的基本特点面向对象程序设计7封装封装l实例:实例:class Clock public: void SetTime(int NewH,int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second;边界特定的访问权限OOP的基本特点外部接口面向对象程序设计8类的声明形式类的声明形式 类是类是一种用户自定义类型一种用户自定义类型,声明形式:,声明形式:class 类名称 public: 公有成员(外部接口) private:

4、 私有成员 protected: 保护型成员;类 和 对 象分号不能丢首字母小写面向对象程序设计9公有类型成员公有类型成员特点:特点: 在关键字在关键字public后面声明,后面声明,它们是它们是类与外部的接口类与外部的接口,任何外部函数,任何外部函数都可以都可以访问公有类型数据和函数。访问公有类型数据和函数。类 和 对 象面向对象程序设计10私有类型成员私有类型成员在关键字在关键字private后面声明,后面声明,只允许只允许本类中的函数访问本类中的函数访问,而类外部的任何函,而类外部的任何函数都数都不能不能访问。访问。如果如果紧跟在类名称的后面声明紧跟在类名称的后面声明私有成员,私有成员,

5、则则关键字关键字privateprivate可以可以省略省略。类 和 对 象面向对象程序设计11保护类型保护类型与与private类似,其差别表现在继承与类似,其差别表现在继承与派生时对派生类的影响不同,第七章讲。派生时对派生类的影响不同,第七章讲。类 和 对 象面向对象程序设计12类的成员类的成员class Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour, Minute, Second;类 和 对 象成员数据成员函数void Clock : SetTime

6、(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS;void Clock : ShowTime() coutHour:Minute:成员名”类 和 对 象面向对象程序设计26例例4-1类的应用举例类的应用举例#includeusing namespace std;class Clock ./类的声明略类的声明略/.类的实现略类的实现略void main(void) Clock myClock; myClock.SetTime(8,30,30); myClock.ShowTime();类 和 对 象面向对象程序设计

7、27构造函数构造函数 构造函数的作用构造函数的作用是在对象被创建是在对象被创建时使用特定的值构造对象时使用特定的值构造对象,或者说将,或者说将对象对象初始化初始化为一个特定的状态。为一个特定的状态。l在对象创建时在对象创建时由系统自动调用由系统自动调用。构造函数和析构函数面向对象程序设计28l如果程序中未声明,则系统自动产生出一如果程序中未声明,则系统自动产生出一个个默认形式默认形式的构造函数,这个构造函数的构造函数,这个构造函数没有没有参数参数,也不做任何事情。,也不做任何事情。l如果类中声明了构造函数,系统就不会自如果类中声明了构造函数,系统就不会自动生成构造函数。动生成构造函数。面向对象

8、程序设计29构造函数的特点构造函数的特点l构造函数要在类体中进行构造函数要在类体中进行声明声明l构造函数名构造函数名与类名与类名相同相同l构造函数构造函数没有没有返回值返回值面向对象程序设计30构造函数举例构造函数举例class Clockpublic:Clock (int NewH, int NewM, int NewS);/声明声明void SetTime(int NewH, int NewM, int NewS);void ShowTime();private:int Hour,Minute,Second;构造函数和析构函数与类名相同,无返回值Clock:Clock(int NewH,

9、int NewM, int NewS)Hour= NewH;Minute= NewM;Second= NewS;建立对象时构造函数的作用:建立对象时构造函数的作用:void main() Clock c (0,0,0); /隐含调用构造函数,将初始值作为实参。隐含调用构造函数,将初始值作为实参。 c.ShowTime();31构造函数的实现构造函数的实现在对象创建时在对象创建时由系统自动调用由系统自动调用面向对象程序设计32构造函数的构造函数的重载重载P100页页 构造函数的重载构造函数的重载面向对象程序设计33析构函数析构函数构造函数和析构函数 所谓析构函数就是当一个对象完成任务之所谓析构函

10、数就是当一个对象完成任务之后,后,释放释放给这个对象分配的内存空间,从而给这个对象分配的内存空间,从而销销毁这个对象毁这个对象。 系统在对象的生存期结束的时刻自动调用系统在对象的生存期结束的时刻自动调用它析构函数。它析构函数。 如果程序中未如果程序中未声明析构函数声明析构函数,编译器将自,编译器将自动产生一个默认的动产生一个默认的析构函数析构函数。面向对象程序设计34析构函数的特点析构函数的特点 1、析构函数的、析构函数的名字名字是在是在类类的的名名字前面字前面加波加波浪号浪号。 2、析构函数、析构函数没有参数没有参数,也,也没有返回值没有返回值。 面向对象程序设计35#includeusin

11、g namespace std;class Point public: Point(int xx,int yy); Point(); /声明声明 /.其它函数原形其它函数原形 private: int X,int Y;构造函数和析构函数构造函数的声明和实现构造函数的声明和实现Point:Point(int xx,int yy) X=xx; Y=yy;Point:Point() /实现实现/构造函数实现构造函数实现41面向对象程序设计37举例二举例二Gou_xi.cpp实验二:上机调试面向对象程序设计38补充:动态内存管理补充:动态内存管理 在在C+中,可以通过中,可以通过new和和delete

12、操作来进行内存的动态管理。操作来进行内存的动态管理。P186页new操作:新建一个对象并进行内存的分配。操作:新建一个对象并进行内存的分配。 在使用在使用new操作时,通常情况下操作时,通常情况下先声明先声明一个指针变量,然后采用下列形式:一个指针变量,然后采用下列形式: 指针变量指针变量=new 变量类型变量类型Delete:销毁一个对象,回收该对象所占用的:销毁一个对象,回收该对象所占用的内存。内存。举例举例1: int *p; 说明是说明是INT 指针指针 p=new int; 为为INT指针指向并分配指针指向并分配一个空间一个空间,空间就是一个空间就是一个INT类型类型 delete

13、p; 销毁销毁p,释放内存,释放内存 举例:举例: float *pFloat=new float20; delete pFloat面向对象程序设计40l一个对象所占内存空间是类中数据成员一个对象所占内存空间是类中数据成员所占内存的空间。所占内存的空间。面向对象程序设计41类和类对象指针类和类对象指针l指向类对象的指针通过指向类对象的指针通过new操作符获操作符获取一个类对象的存储空间,这个指针取一个类对象的存储空间,这个指针指向这个类对象的存储空间指向这个类对象的存储空间面向对象程序设计42作业作业lP4-11面向对象程序设计43拷贝构造函数拷贝构造函数 拷贝构造函数拷贝构造函数是一种特殊的

14、构造函数,其是一种特殊的构造函数,其形参为本类的对象引用形参为本类的对象引用。 功能:使用一个功能:使用一个已经存在已经存在的对象,去的对象,去初始初始化化同类的一个新对象。同类的一个新对象。 此方法又称此方法又称对象的克隆对象的克隆(clone),这样),这样得到对象和原来的对象得到对象和原来的对象具有完全相同的数据成具有完全相同的数据成员员,即相同的属性。,即相同的属性。构造函数和析构函数面向对象程序设计44 如果程序员如果程序员没有没有为类为类声明声明拷贝构拷贝构造函数,则编译器造函数,则编译器自己生成自己生成一个拷贝一个拷贝构造函数。构造函数。class 类名 public : 类名(

15、形参);/构造函数 类名(类名类名(类名 &对象名);对象名);/拷贝构造函数的声明拷贝构造函数的声明 . ;类名类名: 类名(类名类名(类名 &对象名)对象名)/拷贝构造函数的实现拷贝构造函数的实现 函数体函数体 拷贝构造函数的声明和实现拷贝构造函数的声明和实现面向对象程序设计46举例举例class Point public: Point(int xx=0,int yy=0)X=xx; Y=yy; Point(Point& p); /声明; int GetX() return X; int GetY() return Y; private: int X,Y;构造函数和析构函数Point:Po

16、int (Point& p) /实现实现 X=p.X; Y=p.Y; cout拷贝构造函数被调用拷贝构造函数被调用endl;34面向对象程序设计48拷贝构造函数的应用场合拷贝构造函数的应用场合l当用当用类的一个对象类的一个对象去初始化该类的去初始化该类的另一个对另一个对象象时时 l若函数的形参为若函数的形参为类对象类对象,调用函数时,调用函数时,实参实参赋值给形参赋值给形参l当函数的返回值是当函数的返回值是类对象类对象时时面向对象程序设计49拷贝构造函数的应用拷贝构造函数的应用 用类的一个对象去初始化该类的另一个对用类的一个对象去初始化该类的另一个对象时系统象时系统自动调用自动调用拷贝构造函数实现拷贝赋值拷贝构造函数实现拷贝赋值。void main(void) Point A(1,2); Point B(A); /拷贝构造函数被调用拷贝构造函数被调用 coutB.GetX()endl;构造函数和析构函数面向对象程序设计504-2拷贝构造函数举例拷贝构造函数举例 若函数的若函数的形参为类对象形参为类对象,调用函数时,调用函数时,实参赋值给形参。实参赋值给形参。 例如:例如:void fun1(Point p) coutp.GetX()yabbaDabbaDo();/错误:错误:Fred类的对象在定义之前被使用类的对象在定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论