《c程序设计基础》第七章-类和对象.ppt
《《c程序设计基础》第七章-类和对象.ppt》由会员分享,可在线阅读,更多相关《《c程序设计基础》第七章-类和对象.ppt(178页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计基础程序设计基础第第7 7章章 类与对象类与对象北京邮电大学信通院北京邮电大学信通院方莉方莉2第第7 7章章 类与对象类与对象v类类是实现是实现C+C+面向对象程序设计的基础。面向对象程序设计的基础。v面面向向对对象象程程序序设设计计的的基基本本特特点点有有:抽抽象象、封封装装、继承和多态。继承和多态。v类类把把数数据据和和函函数数封封装装在在一一起起,是是C+C+封封装装的的基基本本单元。单元。v本章主要内容本章主要内容类的使用、定义和实现类的使用、定义和实现面向对象分析和面向对象设计面向对象分析和面向对象设计7.1 7.1 类和对象的定义类和对象的定义7.2 7.2 对象的使用
2、对象的使用7.3 7.3 构造函数构造函数7.4 7.4 析构函数析构函数 7.5 7.5 类的静态成员类的静态成员 7.6 7.6 类成员的保护和使用类成员的保护和使用7.7 7.7 运算符重载运算符重载 7.8 7.8 类的组合类的组合7.9 7.9 面向对象分析和设计面向对象分析和设计第第7 7章章 类与对象类与对象47.1 7.1 类和对象的定义类和对象的定义v一个一个类类表示现实生活中的一类事物,比如表示现实生活中的一类事物,比如“学生学生”,事物有相应的特征或属性,它们就是类的事物有相应的特征或属性,它们就是类的数据成员数据成员;事物可能有行为动作,也可能被某些行为动作所操作,事物
3、可能有行为动作,也可能被某些行为动作所操作,这些都用函数来实现,这些函数和类有着不可分割的关这些都用函数来实现,这些函数和类有着不可分割的关系,是构成类的函数成员,或者叫系,是构成类的函数成员,或者叫成员函数成员函数。v在在C+C+中,中,类类实际上相当于一种实际上相当于一种用户自定义的数用户自定义的数据类型据类型。5v在定义了类类型后,就可以定义该类型的变在定义了类类型后,就可以定义该类型的变量,这个变量就称为量,这个变量就称为类的对象类的对象(或实例)。(或实例)。v对象对象是一类事物中的一个具体的个体。是一类事物中的一个具体的个体。v从程序设计的角度来看,从程序设计的角度来看,对象就相当
4、于变量。对象就相当于变量。7.1 7.1 类和对象的定义类和对象的定义6v举例:举例:classStudent/类的定义类的定义private:intid;char20name;intage;floatscore;public:voidgetscore()voidprintstu();7.1 7.1 类和对象的定义类和对象的定义77.1.1 7.1.1 使用类对象使用类对象v如果已经知道某个类的功能和接口函数,就可以使用它了。如果已经知道某个类的功能和接口函数,就可以使用它了。先先定义类对象定义类对象,通过对象,通过对象调用接口函数调用接口函数实现一定的功能。实现一定的功能。classStud
5、entstu01;/class也可以省略不写也可以省略不写Studentstu01;stu01.getscore();stu01.printstu();v这这个个过过程程的的本本质质是是:根根据据对对象象所所需需要要完完成成的的任任务务,向向对对象象发发送送消消息息。对对象象收收到到消消息息后后,调调用用接接口口中中的的相相应应的的函函数数,完完成成它它的的功功能能。对对象象只只需需要要知知道道“做做什什么么”,具具体体工工作作由由成员函数来完成。成员函数来完成。8classclass Student /Student /类类的定的定义义 private:private:int id;int
6、id;char name 20;char name 20;float score;float score;public:public:void GetData();void GetData();void PrintData();void PrintData();v类的声明类的声明:具体说明类的组成具体说明类的组成classclass 类名类名 private:private:/数据成员数据成员protected:protected:/保护成员保护成员public:public:/成员函数成员函数;一般写在类的一般写在类的.h h文件中,也可以写文件中,也可以写在类的在类的.cppcpp文件之首
7、。文件之首。7.1.2 7.1.2 类的声明类的声明9v类实际上是一种类实际上是一种用户自定义的数据类型用户自定义的数据类型。比较比较:s struct studenttruct student int id;int id;char20 name;char20 name;float score;float score;class Studentclass Student private:private:int id;int id;char name20;char name20;float score;float score;public:public:void GetData();void G
8、etData();void PrintData();void PrintData();同是自定义的类型。同是自定义的类型。在在无无显显式式声声明明时时,结结构构体体的的成成员员是是公公有有的的,类类的的成员是成员是私私有的。有的。7.1.2 7.1.2 类的声明类的声明10分析分析:任何一个时钟应该有任何一个时钟应该有时、分、秒时、分、秒的值,这就是时钟的的值,这就是时钟的属性特征;时钟的操作应该有属性特征;时钟的操作应该有设置时间、显示时间设置时间、显示时间等。画出等。画出时钟类的标记图如下:时钟类的标记图如下:例例:要声明一个时钟类要声明一个时钟类11v举例举例:class Clock p
9、ublic:void SetTime(int newH,int newM,int newS);void ShowTime();private:int Hour;int Minute;int Second;7.1.2 7.1.2 类的声明类的声明12v举例举例:classPointpublic:voidSetXY(intx,inty);voidGetXY(int&x,int&y);private:intm_x;intm_y;7.1.2 7.1.2 类的声明类的声明13v关键字关键字publicpublic、protectedprotected、privateprivate说明类成员的访说明类成员
10、的访问控制属性。问控制属性。私有私有(privateprivate)成员成员只允许只允许本类的成员函数本类的成员函数来访问;来访问;公有公有(publicpublic)成员成员是类对外的接口,在类声明和类(函是类对外的接口,在类声明和类(函数)实现之后,类的对象可以访问公有成员。数)实现之后,类的对象可以访问公有成员。保护型保护型(protectedprotected)成员,对于类外其它函数,其可访成员,对于类外其它函数,其可访问性和私有成员的性质相似。问性和私有成员的性质相似。7.1.2 7.1.2 类的声明类的声明14关于访问控制属性,注意关于访问控制属性,注意:v在在类类声声明明中中,三
11、三种种访访问问控控制制属属性性,可可以以按按任任意意次次序序出出现现,也也可可以以不不出出现现。publicpublic等等关关键键字字也也可可以以多多次次出出现现,但但是是一一个个成成员只能具有一种访问控制属性员只能具有一种访问控制属性。v如如果果不不写写访访问问控控制制属属性性关关键键字字,默默认认的的是是privateprivate。在在书书写写时时通通常常习习惯惯将将公公有有类类型型放放在在最最前前面面,这这样样便便于于阅阅读读,因因为为它它们们是外部访问时所要了解的。是外部访问时所要了解的。v一一般般情情况况下下,一一个个类类的的数数据据成成员员应应该该声声明明为为私私有有成成员员,
12、这这样样封封装装性性较较好好。一一个个类类应应该该有有一一些些公公有有的的函函数数成成员员,作作为为对对外外的接口,否则别的代码无法访问类。的接口,否则别的代码无法访问类。7.1.2 7.1.2 类的声明类的声明15v“类的成员类的成员”既可以是既可以是数据成员数据成员,也可以是,也可以是成员函成员函数的原型。数的原型。数据成员数据成员,表示类的属性,声明方式与一般变量相同。表示类的属性,声明方式与一般变量相同。成员函数成员函数,描述类的对象可以进行的操作,一般在类中描述类的对象可以进行的操作,一般在类中声明原型,在声明原型,在类声明之外定义函数的具体实现类声明之外定义函数的具体实现。7.1.
13、2 7.1.2 类的声明类的声明16v类的类的成员函数成员函数描述的是类的行为或操作。描述的是类的行为或操作。在在类声明类声明中,声明函数的原型。中,声明函数的原型。(类的声明文件类的声明文件.h.h文件文件)函函数数的的具具体体实实现现一一般般写写在在类类声声明明之之外外。(类类的的实实现现文文件件.cpp.cpp文件文件)v在类的外部定义成员函数的语法形式为:在类的外部定义成员函数的语法形式为:返回值类型返回值类型 类名类名:成员函数名成员函数名(参数表参数表)函数体函数体 7.1.3 7.1.3 类的成员函数类的成员函数17例例:时钟类时钟类ClockClock的成员函数的实现的成员函数
14、的实现:void Clock:SetTime(int newH,int newM,int newS)Hour=newH;Minute=newM;Second=newS;void Clock:ShowTime()coutHour:Minute:Secondendl;7.1.3 7.1.3 类的成员函数类的成员函数18class Clock public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;void Clock:SetTime(int NewH,int New
15、M,int NewS)Hour=NewH;Minute=NewM;Second=NewS;void Clock:ShowTime()coutHour“:”Minute“:”Secondendl;ClockClock类的声明和实现类的声明和实现19v成员函数描述类的行为(或服务、操作);实现程成员函数描述类的行为(或服务、操作);实现程序的算法,是对类封装的数据进行操作的唯一途径。序的算法,是对类封装的数据进行操作的唯一途径。v在在类定义中说明原型类定义中说明原型(一般在一般在.h h文件中文件中),在,在类的实现类的实现文件文件(.(.cpp)cpp)中中定义函数体定义函数体,并在函数名前使用
16、类名加,并在函数名前使用类名加以限定以限定,标示它与类之间的关系。也可以直接在类中标示它与类之间的关系。也可以直接在类中定义函数体,形成定义函数体,形成内联成员函数内联成员函数。v允许定义允许定义重载函数重载函数和和带缺省形参值带缺省形参值的成员函数。的成员函数。v在声明成员函数时,可以控制访问权限;一般将在声明成员函数时,可以控制访问权限;一般将成成员函数设为公有型员函数设为公有型的。的。7.1.3 7.1.3 类的成员函数类的成员函数20/Tdate.h Tdate.h 类的声明文件类的声明文件class class TdateTdate public:public:void Set(in
17、t m,int d,int y);void Set(int m,int d,int y);/置日期值置日期值 int IsLeapYear();int IsLeapYear();/判是否闰年判是否闰年 void Print();void Print();/输出日期值输出日期值private:private:int month;int month;int day;int day;int year;int year;21/Tdate.cpp Tdate.cpp 类的实现文件类的实现文件void Tdate:Set(int m,int d,int y)void Tdate:Set(int m,int
18、 d,int y)month=m;day=d;year=y;month=m;day=d;year=y;int Tdate:IsLeapYear()int Tdate:IsLeapYear()return(year%4=0&year%100!=0)|(year%400=0);return(year%4=0&year%100!=0)|(year%400=0);void Tdate:Print()void Tdate:Print()cout month/day/year endl;cout month/day/year endl;22v内联函数:内联函数:如果在如果在类的内部类的内部定义成员函数的具
19、体实现,则该成员函定义成员函数的具体实现,则该成员函数为数为内联成员函数内联成员函数。函数定义时没有任何的附加说明,所以称为函数定义时没有任何的附加说明,所以称为隐式隐式声明的声明的内联成员。内联成员。显示内联函数显示内联函数 (用用 inline)inline)7.1.3 7.1.3 类的成员函数类的成员函数23class Point public:void SetXY(int x,int y)m_x=x;m_y=y;void GetXY(int&x,int&y)x=m_x;y=m_y;private:int m_x;int m_y;7.1.3 7.1.3 类的成员函数类的成员函数24cla
20、ss Clock public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;inline void Clock:SetTime(int NewH,int NewM,int NewS)Hour=NewH;Minute=NewM;Second=NewS;inline void Clock:ShowTime()coutHour“:”Minute“:”Secondendl;显式声明的内显式声明的内联函数联函数7.1.3 7.1.3 类的成员函数类的成员函数25v带默认参数
21、值的成员函数带默认参数值的成员函数类类的的成成员员函函数数也也可可以以有有默默认认形形参参值值,其其调调用用规规则则同普通函数相同。同普通函数相同。v例如时钟类的例如时钟类的SetTimeSetTime()()函数,使用默认值:函数,使用默认值:void Clock:SetTime(int newH=0,int newM=0,int newS=0)Hour=newH;Minute=newM;Second=newS;7.1.3 7.1.3 类的成员函数类的成员函数26v重载函数重载函数成员函数可以用与普通函数同样的方法成员函数可以用与普通函数同样的方法重载重载。例例:class Point pu
22、blic:void Set(int x,int y);void Set(int x,int y,int color);void Get(int&x,int&y);void Get(int&x,int&y,int&color);private:int m_x;int m_y;int m_color;7.1.3 7.1.3 类的成员函数类的成员函数27v注注意意,类类名名是是成成员员函函数数名名的的一一部部分分,所所以以一一个个类类的的成成员员函函数数与另一个类的成员函数即使同名,也与另一个类的成员函数即使同名,也不能认为是重载不能认为是重载。class Clock public:void Set
23、(int NewH,int NewM,int NewS);void Show();private:int Hour,Minute,Second;class Point public:void Set(int x,int y);void Get(int&x,int&y);private:int m_x;int m_y;7.1.3 7.1.3 类的成员函数类的成员函数28v对象是一类事物中的个体,从程序设计的角度来对象是一类事物中的个体,从程序设计的角度来看,看,对象就相当于变量对象就相当于变量。v定义一个对象和定义一个一般变量相同。定义一个对象和定义一个一般变量相同。类名称类名称 对象名称对象名
24、称例例 Clock ck1;Clock ck1;Point point1;Point point1;7.1.4 7.1.4 对象对象29v定定义义变变量量时时要要分分配配存存储储空空间间,同同样样,定定义义一一个个对对象象时时要要分分配配存存储储空空间间,一一个个对对象象所所占占的的内内存存空空间间是是类类的的数数据据成成员员所所占占的的空空间间总总和和。类类的的成成员员函函数数存存放放在在代码区,不占内存空间。代码区,不占内存空间。v类类的的成成员员是是抽抽象象的的,对对象象的的成成员员才才是是具具体体的的。类类的的数数据据成成员员都都不不会会有有具具体体的的属属性性值值。只只有有对对象象的
25、的成成员员才会有具体的属性值。才会有具体的属性值。7.1.4 7.1.4 对象对象30v对象的使用对象的使用:根据类的功能和接口函数,定义对象,根据类的功能和接口函数,定义对象,通过对象调用接口函数实现一定的功能。通过对象调用接口函数实现一定的功能。v声明了类及其对象,在类的外部(即在类定义和成声明了类及其对象,在类的外部(即在类定义和成员函数的实现代码之外),就可以员函数的实现代码之外),就可以访问对象的公有访问对象的公有成员成员(包括数据成员和函数成员)了。(包括数据成员和函数成员)了。v语法形式为语法形式为:对象名对象名.公有数据成员公有数据成员对象名对象名.公有成员函数名公有成员函数名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c程序设计基础 程序设计 基础 第七 对象
限制150内