面向对象程序设计语言C---精品课模板cs.ppt
《面向对象程序设计语言C---精品课模板cs.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计语言C---精品课模板cs.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 类与对象类与对象丘志杰丘志杰电子科技大学电子科技大学计算机学院计算机学院 软件学院软件学院C+与与C最最大大的的不不同同在在于于C+增增加加了了面面向向对对象象的的概概念念。C+允允许许用用户户定定义义新新的的抽抽象象数数据据类类型型类类类类型型,它它将将一一组组数数据据和和与与这这些些数数据据相相关关的的操操作作封封装装在在一一起起,实实现现了了面面向向对对象象技技术术中中的的核核心概念心概念数据封装数据封装。2023/2/92抽象是对具体对象(问题)进行概括,抽象是对具体对象(问题)进行概括,抽出这一类对象的抽出这一类对象的公共性质公共性质并加以描述并加以描述的过程。的过程。
2、先注意问题的本质及描述,其次是实现过先注意问题的本质及描述,其次是实现过程或细节。程或细节。数据抽象:描述某类对象共有的属性或状数据抽象:描述某类对象共有的属性或状态。态。行为抽象:描述某类对象共有的行为特征行为抽象:描述某类对象共有的行为特征或具有的功能。或具有的功能。抽象抽象2023/2/93抽象实例抽象实例:时钟:时钟数据抽象:数据抽象:具有表明当前时间的具有表明当前时间的时、分、秒时、分、秒行为抽象:行为抽象:具有具有设置时间设置时间和和显示时间显示时间两个最两个最基本的功能基本的功能2023/2/94抽象实例抽象实例:人人数据抽象:数据抽象:姓名、年龄、性别等姓名、年龄、性别等行为抽
3、象:行为抽象:生物属性:吃饭、穿衣、睡觉、行走等行为生物属性:吃饭、穿衣、睡觉、行走等行为社会属性:工作、学习等行为社会属性:工作、学习等行为2023/2/95在研究问题时,侧重点不同,可能会产生在研究问题时,侧重点不同,可能会产生不同的抽象结果;解决同一问题时要求不不同的抽象结果;解决同一问题时要求不同,也会产生不同的抽象结果。例如:同,也会产生不同的抽象结果。例如:如果开发一个人事管理软件,那么关心的是员工的如果开发一个人事管理软件,那么关心的是员工的姓名、性别、工龄、工资、工作部门等相关信息。姓名、性别、工龄、工资、工作部门等相关信息。如果开发学籍管理软件,那么关心的是学生的姓名、如果开
4、发学籍管理软件,那么关心的是学生的姓名、性别、年龄、籍贯、所在学院等相关信息。性别、年龄、籍贯、所在学院等相关信息。因此,抽象是相对,而非绝对的。因此,抽象是相对,而非绝对的。2023/2/96如何实现抽象?如何实现抽象?抽象定义了一个事物的本质特征,那么抽象定义了一个事物的本质特征,那么从软件设计的角度又如何对抽象出来的从软件设计的角度又如何对抽象出来的结果进行描述呢?结果进行描述呢?封装可以实现抽象。封装可以实现抽象。封装就是将封装就是将数据和操作这些数据的函数数据和操作这些数据的函数进行有机地结合。进行有机地结合。C+的解决方案:的解决方案:用类来实现封装机制用类来实现封装机制2023/
5、2/97定义和使用类的基本过程定义和使用类的基本过程第一步:进行抽象第一步:进行抽象第二步:定义类第二步:定义类第三步:实现类第三步:实现类第四步:使用类第四步:使用类2023/2/98类的定义:类的成员构成类的定义:类的成员构成class ClassName数据成员数据成员函数成员函数成员;类是一种抽象数据类型,声明形式如下:类是一种抽象数据类型,声明形式如下:关键字关键字class用于声用于声明一个类类型明一个类类型用于表达数据抽象用于表达数据抽象用于表达行为抽象用于表达行为抽象2023/2/99类定义举例:时钟类类定义举例:时钟类class Clockint Hour,Minute,Se
6、cond;void SetTime(int h,int m,int s);void ShowTime();2023/2/910类成员的访问控制类成员的访问控制什么是什么是“类内类内”和和“类外类外”在类定义之内称为类内在类定义之内称为类内在类定义之外称为类外在类定义之外称为类外数据封装的目的就是数据封装的目的就是信息隐蔽信息隐蔽。为了达到信。为了达到信息隐蔽,在息隐蔽,在C+类中,并非所有的成员都是类中,并非所有的成员都是对外可见的(或者说,是类外可以访问的)。对外可见的(或者说,是类外可以访问的)。通过设置成员的通过设置成员的访问控制属性访问控制属性来实现对类成来实现对类成员的访问控制。这些
7、控制属性有:员的访问控制。这些控制属性有:public、protected、private2023/2/911类的定义:对成员的访问控制类的定义:对成员的访问控制class ClassNamepublic:公有成员公有成员protected:保护成员保护成员private:私有成员私有成员;2023/2/912公有成员公有成员在关键字在关键字public后面声明,它们是类与后面声明,它们是类与外部的接口,任何外部的接口,任何类内、类外类内、类外函数函数都可都可以访问公有数据和函数。以访问公有数据和函数。class Clockpublic:void SetTime(int h,int m,int
8、 s);/公有成员函数公有成员函数 void ShowTime();/公有成员函数公有成员函数;2023/2/913私有成员私有成员在关键字在关键字private后面声明,后面声明,只允许本只允许本类中的函数(类中的函数(即类内函数即类内函数)访问,而类)访问,而类外的任何函数都不能访问。外的任何函数都不能访问。class Clockprivate:int Hour,Minute,Second;/私有数据成员私有数据成员;2023/2/914保护成员保护成员在关键字在关键字protected后面声明后面声明的数据成的数据成员或成员函数。与员或成员函数。与private类似,其差别类似,其差别表
9、现在继承与派生时对派生类的影响不表现在继承与派生时对派生类的影响不同,在第八章中再描述。同,在第八章中再描述。2023/2/915类定义举例:时钟类类定义举例:时钟类class Clockpublic:void SetTime(int h,int m,int s);void ShowTime();private:int Hour,Minute,Second;2023/2/916类的实现类的实现实现一个类,就是按照所设定的功能实现一个类,就是按照所设定的功能语义去实现类中的每一个成员函数。语义去实现类中的每一个成员函数。2023/2/917class Clockprivate:int Hour,
10、Minute,Second;public:void SetTime(int h,int m,int s)Hour=h;Minute=m;Second=s;void ShowTime()cout“Current Time:”coutHour“:”Minute“:”Second endl;在类内实现成员函数,编译器按在类内实现成员函数,编译器按内联函数处理内联函数处理在类内实现成员函数,编译器按在类内实现成员函数,编译器按内联函数处理内联函数处理2023/2/918class Clockprivate:int Hour,Minute,Second;public:void SetTime(int h
11、,int m,int s);/给出函数原型给出函数原型 void ShowTime();/给出函数原型给出函数原型;void Clock:SetTime(int h,int m,int s)Hour=h;Minute=m;Second=s;void Clock:ShowTime()cout“Current Time:”coutHour“:”Minute“:”Second 公有成员函数名公有成员函数名(形参列表形参列表);对象的指针对象的指针-公有数据成员公有数据成员2023/2/921举例:一个比较完整的举例:一个比较完整的Clock类类/定义定义Clock类类class Clockpriva
12、te:int Hour,Minute,Second;public:void SetTime(int h,int m,int s);void addHour(int h);void addMinute(int m);void addSecond(int s);void ShowTime();2023/2/922/实现实现Clock类中的成员函数类中的成员函数void Clock:SetTime(int h,int m,int s)Hour=h;Minute=m;Second=s;void Clock:addHour(int h)Hour+=h;void Clock:addMinute(int m
13、)Minute+=m;void Clock:addSecond(int s)Second+=s;void Clock:ShowTime()cout“Current Time:”;coutHour“:”Minute“:”Secondendl;2023/2/923/使用使用Clock类类void main()Clock clock_1,clock_2;clock_1.SetTime(9,5,25);clock_2.SetTime(15,16,45);clock_1.addHour(3);clock_2.addMinute(8);clock_1.ShowTime();clock_2.ShowTime
14、();程序输出:程序输出:Current Time:12:5:25 Current Time:15:24:452023/2/924总结:定义和使用类类型的过程总结:定义和使用类类型的过程抽象:抽象:对事物进行抽象对事物进行抽象定义类:定义类:根据抽象的结果定义类的特性根据抽象的结果定义类的特性实现类:实现类:实现类中成员函数的逻辑实现类中成员函数的逻辑使用类:使用类:在程序中定义类的实例,使用在程序中定义类的实例,使用类的公有成员。类的公有成员。2023/2/925在在定定义义类类时时,把把可可以以被被外外部部访访问问的的成成员员说说明明为为public属属性性,作作为为外外部部访访问问类类中
15、中成成员员的的接接口口。把把不不能能被被外外部部访访问问的的成成员员说说明明为为private或或protected属性。属性。私有成员私有成员公有成员公有成员类对外的接口类对外的接口保护成员保护成员2023/2/926请思考以下情况请思考以下情况能调用下面语句吗?能调用下面语句吗?clock_1.Hour=21;如果将如果将ShowTime说明为说明为private属性,属性,还能调用如下语句吗?还能调用如下语句吗?clock_2.ShowTime();2023/2/927练习一练习一设计一个三角形类设计一个三角形类CTriangle,该类满足下,该类满足下述要求:述要求:a)有一个成员函数
16、)有一个成员函数SetEdge,用于设置三,用于设置三角形的边。角形的边。b)有一个成员函数)有一个成员函数GetArea,用于获得三,用于获得三角形的面积。角形的面积。c)有一个成员函数)有一个成员函数GetCircumference,用,用于获得三角形的周长。于获得三角形的周长。在在main函数中,实例化一个函数中,实例化一个Ctriangle类的类的对象,将三条边分别为对象,将三条边分别为3、4、5,然后将,然后将其面积和周长显示在屏幕上。其面积和周长显示在屏幕上。2023/2/928备注:备注:1三角形面积的计算方式如下:三角形面积的计算方式如下:a、b、c分别为三条边,分别为三条边,
17、S代表面积,代表面积,p=(a+b+c)/2,那么,那么S2=p(p-a)(p-b)(p-c)。2求开平方的库函数是求开平方的库函数是sqrt,需要包含,需要包含math.h头文件,使用方式的举例如下:头文件,使用方式的举例如下:int a,b;b=36;a=sqrt(b);那么那么a的值为的值为62023/2/929练习二练习二Need To Do2023/2/930几点说明几点说明在声明类时,具有不同访问属性的成员可以按任在声明类时,具有不同访问属性的成员可以按任意顺序出现。意顺序出现。class Clockprivate:int Hour,Minute,Second;public:voi
18、d SetTime(int h,int m,int s);void ShowTime();protected:;2023/2/931修饰访问属性关键字可以多次出现。修饰访问属性关键字可以多次出现。class Clockpublic:void SetTime(int h,int m,int s);private:int Hour,Minute,Second;public:void ShowTime();2023/2/932一个成员只能具有一种访问属性,否则会出现歧异一个成员只能具有一种访问属性,否则会出现歧异。class Clockpublic:void SetTime(int h,int m,
19、int s);void ShowTime();private:void ShowTime();int Hour,Minute,Second;2023/2/933例子:简单例子:简单int数组类数组类/数组类的定义数组类的定义const int ARRAY_SIZE=4;class MyArrayint dataARRAY_SIZE;public:int getArraySize();int setVal(int pos,int val);int getMaxVal();int getMinVal();2023/2/934/数组类的实现数组类的实现int MyArray:getArraySize
20、()return ARRAY_SIZE;int MyArray:setVal(int pos,int val)if(posARRAY_SIZE)return-1;datapos=val;return 0;2023/2/935/数组类的实现数组类的实现(续续)int MyArray:getMaxVal()int temp=data0;for(int i=1;itemp)temp=datai;return temp;int MyArray:getMinVal()int temp=data0;for(int i=1;iARRAY_SIZE;i+)if(dataitemp)temp=datai;ret
21、urn temp;2023/2/936/数组类的使用数组类的使用int main()MyArray array;int i,size,v,max,min;size=array.getArraySize();coutplease input size numbers:endl;for(i=0;iv;array.setVal(i,v);max=array.getMaxVal();min=array.getMinVal();coutmax value is:maxendl;coutmin value is:minendl;return 0;2023/2/937改造:为简单改造:为简单int数组类增加
22、公用的私有函数数组类增加公用的私有函数/数组类的定义:增加公用的私有函数数组类的定义:增加公用的私有函数const int ARRAY_SIZE=4;class MyArrayint dataARRAY_SIZE;int getVal(int condition);public:int getArraySize();int setVal(int pos,int val);int getMaxVal();int getMinVal();2023/2/938/数组类的实现:增加和调用公用的私有函数数组类的实现:增加和调用公用的私有函数int MyArray:getVal(int condition
23、)int temp=data0;for(int i=1;itemp)temp=datai;elseif(datai SetTime(9,5,25);p-ShowTime();p-SetTime(10,3,28);p-ShowTime();2023/2/941关键字关键字thisC+为为每每个个非非静静态态成成员员函函数数提提供供一一个个this指针。指针。this指指针针是是一一个个隐隐含含的的指指针针,它它指指向向了了正正在被成员函数操作的那个对象。在被成员函数操作的那个对象。this指指针针不不能能显显式式声声明明,它它只只是是非非静静态态成成员函数的一个形参。员函数的一个形参。2023/
24、2/942this指针举例指针举例class Counterint value;public:void setValue(int value)this-value=value;class Counterint value;public:void setValue(int v)value=v;void main()Counter obj1,obj2;obj1.setValue(1);obj2.setValue(2);2023/2/943class Counterint value;public:void setValue(Counter*this,int v)this-value=v;class
25、 Counterint value;public:void setValue(int v)value=v;void main()Counter obj1,obj2;obj1.setValue(1);obj2.setValue(2);编译器做了特殊处理编译器做了特殊处理void main()Counter obj1,obj2;obj1.setValue(&obj1,1);obj2.setValue(&obj2,2);2023/2/944构造函数和析构函数构造函数和析构函数类类的的数数据据成成员员是是不不能能在在定定义义时时直直接接初始化的,以初始化的,以Clock类为例:类为例:class Cl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计语言 精品 模板 cs
限制150内