ImageVerifierCode 换一换
格式:PPT , 页数:44 ,大小:252KB ,
资源ID:13336138      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/13336138.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(类与对象(c++).ppt)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

类与对象(c++).ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第7章 类与对象,71 类、对象及数据封装,72 构造函数、析构函数、成员函数、静态成员与友元,教学目标,:,1,掌握类及对象的概念、类与对象的关系、类与对象的差异,2,掌握构造函数、析构函数的作用及定义,3,了解静态成员、友元等概念。,教学重点:,(,1,),类和对象概念和定义;,(,2,)构造函数和析构函数解析。,教学难点:,构造函数、析构函数,第7章 类与对象,7.1 类的定义,7.1.1 类的定义,7.1.2 类成员的访问控制,7.1.3 类的成员函数,7.1.4 对象,7.1.1,类的定义,类的引

2、入:,类是一种由用户定义的复杂数据类型,它是将不同类型的数据及相关的操作封装在一起的集合体.,描述客观事物时,必须用不同的数据类型来描述事物各个不同的方面。如一种商品:,商品名称(用字符串描述);该商品数量(用整型数描述),该商品单价(用浮点数描述),该商品总价(用浮点数描述)。,这里用了属于三种不同数据类型的四个数据成员来描述一种商品。,7.1.1 类的定义,类的定义的一般格式:,/说明部分,class ,public:,protected:,private:,;,/实现部分,7.1.1 类的定义,类的表述:,class Goods,private:,char name21;,int,amo

3、unt;,float price,float,tValue,;,public:,setPrice,(,int,p);,;/,最后的分号不可少,这是一条说明语句,关键字,class,是数据类型说明符,指出下面说明的是类。标识符,Goods,是商品这个类的类型名。花括号中是构成类体的系列成员,关键字,public,是一种访问限定符。,7.1.1 类的定义,类定义语法格式:,class,类名,private:,成员表1;,public:,成员表2;,protected:,成员表3;,;/注意:所有说明都以分号结束,其中“,class,类名”称为类头。花括号中的部分称为类体,类体中定义了类成员表,包含

4、数据和函数.,7.1.1 类的定义,成员函数:,class Goods,private:,char name21;,int,amount;,float price;,float,tValue,;,public:,void,registerGoods,(char,int,float);/,输入数据,void,countTotal,(void);/,计算商品总价值,void,getName,(char);/,读取商品名,int getAmount,(void);/,读取商品数量,float,getPrice,(void);/,读取商品单价,float,getTvalue,(void);/,读取商品

5、总价值,7.1.1 类的定义,封装:,类把数据(事物的属性)和函数(事物的行为操作)封装为一个整体。,接口:,通常数据成员被说明成私有的,函数成员被说明成公有的;从外部对数据成员进行操作,只能通过公有函数来完成,从而使数据受到了良好的保护,不易受副作用的影响。公有函数集定义了类的接口。,成员函数可以直接访问类定义中的任一成员,可以处理数据成员,也可调用成员函数。,注意:,类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员初始化。类中的任何数据成员也不能使用关键字,extern、auto,或,register,限定其存储类型,。,7.1.2 类成员的访问控制,访问限定符:,p

6、ublic(,公共的)说明的成员能从外部进行访问。,private(,私有的)和,protected(,保护的)说明的成员不能从外部进行访问。,每种说明符可在类体中使用多次。,访问限定符的作用域是从该说明符出现开始到下一个说明符之前或类体结束之前结束。,如果在类体起始点无访问说明符,系统默认定义为私有,(,private)。,访问限定符,private、protected,体现了类具有封装性。,7.1.3类的成员函数,成员函数定义:,成员涵数用来描述事物的行为.成员涵数的说明必须在类体中进行,但定义既可以在类体中进行,也可以在类体外进行.,(1)通常在类定义中,成员函数仅作声明。函数定义通常在

7、类的说明之后进行,其格式如下:,返回值类型 类名:函数名(参数表),/函数体,其中运算符“:”称为作用域运算符,它指出该函数是属于哪一个类的成员函数。,(2)另一种方式是对成员涵数进行说明后,紧接着进行成员涵数的定义.,class Goods,private:,char name21;,int,amount;,float price,float,tValue,;,public:,float,getPrice,();,float,getTvalue,();,void,setPrice,(,int,p)price=p;,;,float Goods:,getPrice,()return(Price)

8、float Goods:,getTvalue,()return(,tValue,);,7.1.3类的成员函数,7.1.4 对象的定义,定义对象:,对象是类的实例(,instance)。,定义一种数据类型只是告诉编译系统该数据类型的构造,并没有分配内存。类只是一个样板,以此样板可以在内存中开辟出同样结构的实例对象。,一个对象必须属于一个已知的类.,7.1.4 对象的定义,定义对象的格式如下:,();,其中:,类名:为对象所属的类的名称;,对象名:合法的,C+,标识符,可以一次定义多个对象.,参数表:为初始化对象时所需要的参数.,例如:,Goods car;,这个定义创建了,Goods,类的一

9、个对象,car,,同时为它分配了属于它自己的存储空间,用来存放数据和对这些数据实施操作的成员函数(代码),。,对象存储:,数据区,代码区,对象,1,对象,数据区,代码区,对象,数据区,代码区,图7.1 各对象完全独立地安排内存的方案,图7.1是系统为每一个对象分配了全套的内存。数据区安放数据成员,代码区安放成员函数。,注意:区别同一个类的各个不同的对象的属性是由数据成员决定的,不同对象的数据成员的内容是不一样的;而行为(操作)是用函数来描述的,这些操作的代码对所有对象都是一样的。,7.1.4 对象的定义,数据区,对象,1,数据区,对象,数据区,对象,公共代码区,图7.2,各对象的代码区共用的方

10、案,图,7.2,仅为每个对象分配一个数据区,代码区(存放成员函数的区域)为各对象类共用。,图,7.1,对应的是在类说明中定义函数,而图,7.2,对应的是在类说明外部定义函数。,7.1.4 对象的定义,7.1.4对象的定义,对象的成员就是用来创建该对象的类所定义的成员,包括数据成员和成员涵数,创建对象之后,就可以使用.和-来访问对象的数据成员和成员涵数,一般格式如下:,.数据成员名,.成员涵数名(参数表),或者,-成员涵数名(参数表),对象使用规则:,只要在对象名后加点号(点操作符),再加数据成员或成员函数名就可以了。但是这些成员必须是公有的成员,只有公有成员才能在对象的外面对它进行访问。,【例

11、7.1,】,中对象,car,的4个数据成员全是私有的,如写:,car.name;car.amount;,car.price;car.,tValue,;,是错误的,必须用对象,car,所带的公有函数进行访问,。,7.1.4 对象的定义,7.2,构造函数和析构函数,7.2.1构造函数,7.2.2析构函数,7.2.3 拷贝构造函数,7.2.4 静态成员,7.2.5友元函数,7.2.1构造函数,数据成员多为私有的,要对它们进行初始化,必须用一个公有函数来进行。同时这个函数应该在且仅在定义对象时自动执行一次。这个函数被称为:构造函数(,constructor).,构造涵数的作用是:在对象被创建时用特定的

12、值构造对象,将对象初始化为一种特定的状态,使该对象具有不同于其他对象的特征.,构造涵数由系统自动调用.,7.2.1构造函数,构造函数特征:,1.函数名与类名相同。,2.构造函数无函数返回类型说明。注意是什么也不写,也不可写,void!,3.,在程序运行时,当新的对象被建立时,该对象所属的类的构造函数自动被调用,在该对象生存期中也只调用这一次。,4.构造函数可以重载。严格地讲,说明中可以有多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行。,7.2.1构造函数,5.构造函数可以在类中定义,也可以在类外定义。,6.如果类说明中没有给出构造函数,则,C+,编译器自动

13、给出一个默认的构造函数:,类名(,void),但只要我们定义了一个构造函数,系统就不会自动生成默认的构造函数。,只要构造函数是无参的或各参数均是有默认值的,,C+,编译器都认为是默认的构造函数,并且默认的构造函数只能有一个。,7.2.1 构造函数,Goods,的构造函数:,三参数:,Goods(char*n,int,a,float p),strcpy,(name,n);amount=a;price=p;,tValue,=price*amount;,两参数:货名和单价,,Goods(char*n,float p),strcpy,(name,n);price=p;amount=0;,tValue,

14、0.0;,默认的构造函数:,Goods(),name0=0;price=0.0;amount=0;,tValue,=0.0;,这三个构造函数同时被说明(重载)。,7.2.1构造函数,构造函数应用:,Goods car1(“,夏利2000”,30,98000.0);,调用了,Goods,中的第一个构造函数,等效于:,Goods car1=Goods(“,夏利2000”,30,98000.0);,Goods car2(“,桑塔那2000”,164000.0);,调用的是第二个构造函数,参数为两个。,Goods car3;,定义时调用不带参数的构造函数,但是定义对象时不能加括号。例如:,Goods

15、 car4();,car4(),是不带参数的函数,它的返回值是类,Goods,的对象。,7.2.2析构函数,析构函数(,destructor),特征:,当一个对象的生命周期结束时,,C+,会自动调用析构函数(,destructor),对该对象进行善后工作,,1.构函数名与类名相同,但在前面加上字符,如,Goods()。,2.,析构函数无函数返回类型,与构造函数在这方面是一样的。但析构函数不带任何参数。,3.一个类有一个也只有一个析构函数,这与构造函数不同。析构函数可以默认。,4.对象注销时,系统自动调用析构函数。,7.2.3 拷贝构造函数,拷贝构造函数的引入:,同一个类的对象在内存中有完全相同

16、的结构,如果作为一个整体进行复制是完全可行的。这个复制过程只需要复制数据成员,而成员函数是共用的(只有一份代码)。在建立对象时可用同一类的另一个对象来初始化该对象,这时所用的构造函数称为拷贝构造函数(,Copy Constructor)。,故:拷贝构造涵数是用一个已知的对象来初始化一个正在创建的同类对象.,7.2.3 拷贝构造函数,拷贝构造函数的一般格式:,:(,const,类名&),涵数体,特征:,是一种构造涵数,与类名同名,不指定返回值类型;,只有一个参数,且该参数是同类对象的引用;,每一个类都必须有一个拷贝构造涵数,若类中没有定义拷贝构造涵数,则系统自动生成一个公有的拷贝构造涵数.,7.

17、2.3 拷贝构造函数,例如:,Goods (const Goods&,cgd,),strcpy,(name,cgd,.name);,price=,cgd,.price;,amount=,cgd,.amount;,tValue,=,cgd,.,tValue,;,7.2.3 拷贝构造函数,实拷贝构造涵数的调用实例:,Goods car1(“,夏利2000”,30,98000.00);,/调用三个参数的构造函数,Goods car2=car1;/,调用拷贝构造函数,Goods car3(car1);,/,调用拷贝构造函数,,car1,为实参,这样三个对象的初始化结果完全一样。,注意:,在类定义中如果

18、没有显式给出构造函数时,并不是不用构造函数,而是由系统自动调用默认的构造函数或默认的拷贝构造函数。如果有程序设计者定义的构造函数(包括拷贝构造函数),则按函数重载的规律,调用合适的构造函数。,7.2.4 静态数据成员,静态数据成员定义与使用:,在类定义中,用关键字,static,修饰的数据成员为静态数据成员。,该类所有对象共享由系统为静态成员分配的一个存储空间,而这个存储空间是在编译时分配的,在定义对象时不再为静态成员分配空间。,静态数据是该类所有对象所共有的,可提供同一类的所有对象之间信息交换的捷径。,7.2.4 静态数据成员,静态数据成员定义与使用:,静态数据成员属于整个类,使用时可用以下

19、格式:,类名:静态数据成员名 /在类的外部使用时,注意:,(1)静态数据成员在类中声明,但不能在其中定义。,(2)静态数据成员的初始化不能在构造函数中进行。,7.2.4 静态数据成员,【例7.3】,用静态数据成员计算由同一类建立的对象的数量,执行程序后输出:,对象数量=1 /,a0,构造函数产生,对象数量=2 /,a1,构造函数产生,对象数量=3 /,a2,构造函数产生,对象数量=2 /,a2,析构函数产生,对象数量=1 /,a1,析构函数产生,对象数量=0 /,a0,析构函数产生,7.,2.4,静态成员函数,静态成员函数的引入:,当一个函数不需要访问类中除静态数据成员之外的数据时,我们可以将

20、其定义为静态成员函数。,一般情况下,静态成员函数只能访问类中的静态数据成员。静态成员函数是被一个类中所有对象共享的成员函数,不属于哪个特定的对象。,7.,2.4,静态成员函数,静态成员函数的使用:,将成员函数说明为静态,使该成员函数与该类的不同对象无关。静态成员函数的调用,在对象之外可以采用下面的方式:,类名,:,函数名,(,对象名,参数表,);,或者,任一类对象名,:,函数名,(,对象名,参数表,);,静态函数成员多为公有的。,7.,2.4,静态成员函数,静态成员函数的使用实例:,在下面的程序中,将使用类,Car,为自己的每一个对象提供了对象,ID,号。创建或销毁对象时,将有一静态数据成员记

21、录程序中的对象数。执行结果是显示对象,ID,及对象数。,7.,2.4 静态成员函数,静态成员函数的使用实例,:,#,include,class Car,private:,static int counter;/,静态数据成员,int,id;,public:,Car,(),;/,构造函数,Car,(),;/,析构函数,static void display,(),;/,静态成员函数,void,displayID,(),;,;,7.,2.4,静态成员函数,静态成员函数的使用实例:,int Car:counter=0;/,定义静态数据成员,Car:Car,(),counter+;id=counter

22、Car:Car,(),counter-;,cout,Object number id being destroyed;,void Car:display,(),/static function,cout,Number of objects created is=counter,endl,;,void Car:,displayID,(),cout,Object ID is id,endl,;,7.,2.4,静态成员函数,静态成员函数的使用实例:,int main,(),Car a1;,Car:display,(),;,Car a2,a3;,Car:display,(),;,a1.displa

23、yID,(),;,a2.displayID,(),;,a3.displayID,(),;,return 0;,在,C+,中,友元(,friend),函数允许在类外访问该类中的任何成员,就象成员函数一样。友元函数用关键字,friend,说明。,由于类的封装性,只有类的成员涵数才能访问类的私有成员,而外部涵数只能访问类的公有成员,但有时需要在类的外部访问类的私有成员,以减少使用类的成员涵数访问私有成员而带来的参数传递、类型检查、安全性检查的时间开销。,7,.2.5,友元函数,7,.2.5,友元函数,友元函数是一种定义在类外面的普通函数,它需要在类体内进行说明,为区别友元与类成员函数,在说明友元函数

24、时前面加关键字,friend。,友元函数不是成员函数,但是它可以访问类私有成员。,普通函数通过在类中的友元声明成为该类的友元函数。,例如,:,class Goods,public:,void,getPrice,();,friend void,displayAll,(Goods g);/,友元函数的声明,;,void display(Goods g)/,友元函数没有,:,运算符,/,一些代码,7.,2.5,友元函数,注意:,1.,友元函数不是类的成员函数,在友员函数体中访问对象的成员,必须用对象名加运算符“,.”,加对象成员名。但友元函数可以访问类中的所有成员,一般函数只能访问类中的共有成员。,

25、2.,友元函数不受中类的访问权限关键字限制,可以把它放在类的公有、私有、保护部分,但结果一样。,3.,某类的友元函数的作用域并非该类作用域。如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则与一般函数相同。,7.,2.5,友元函数,友元类:整个类可以是另一个类的友元。友元类的每个成员函数都是另一个类的友元函数,都可访问另一个类中的保护或私有数据成员。,定义方法如下:,class B;/,前向声明,class A ,friend B;/,声明,B,为,A,的友元类,;,7.,2.5,友元函数,小结:,1、掌握类及对象的概念、类与对象的关系、类与对象的差异。,2、掌握构造函数、析构函数的作用及定义,思考题:,1、构造函数和析构函数有什么作用?,2、什么是拷贝构造函数,拷贝构造函数何时被调用?,作业题:,1、设计一个用与人事管理的“人员”类。,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服