版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、7章类与对象71类和对象(定义及使用)初步72成员函数的重载73对象的初始化、结构函数与析构函数4类的定义及其使用5类的静态成员及常量成员静态成员静态成员数据1静态成员数据的定义,与静态种类的变量的定义方式同样,要在成员数据的定义以前加重点字static。2静态成员数据一定有确立的值,但因为在类的定义中不可以对成员数据直接进行初始化,故一定在类定义的外面对静态成员数据再申明一次,并进行初始化,此时,前面不需要加重点字static。同时为了保持静态成员数据取值的一致性,一般在类的结构函数中不给静态成员数据设置初值。对静态成员数据初始化的次序为它们在类体外申明的次序.3在同一个程序中,当一个类有多
2、个对象时,则这些对象中的静态成员数据都共享同一个储存空间,即在定义类时,就为静态成员数据分派储存单元,此后创立该类的对象时,将不再为该静态成员数据分派储存单元,也不会对该静态成员数据初始化。静态成员数据初始化格式:=;4类的静态成员数据拥有全局变量的某些特色,比方在程序开始运转时就为静态成员数据分派储存空间,但它只有类的作用域。即在履行main()以前,第一对静态成员数据和全局变量分派储存空间并进行初始化,当整个程序结束时才取消静态成员数据和全局变量。5静态成员数据也能够分为公有的、私有的和受保护的静态成员。对公有静态成员,即能够经过类的对象进行接见,也能够经过类名直接接见(这是静态成员数据与
3、一般成员数据的另一个差别)。格式:私有的和保护的静态成员数据则只好被该类的公有成员函数接见。6值得注意的是,在创立任何对象以前,类的静态成员数据已经存在并能够引.7静态成员数据也能够是用户自定义种类的数据。7512静态成员函数1定义静态成员函数时,只需在成员函数名前用重点字static修饰即可。2静态成员函数属于整个类,它是由该类的全部对象所共享的成员函数,它不属于某个对象。所以它不含有隐含的*this指针参数,故它不可以像一般成员函数那样直接接见对象中的非静态的成员(成员函数和成员数据),即静态成员函数只好接见所在类的静态的成员(成员函数和成员数据)、全局变量、外面函数等。(因为它们不属于任
4、一个特定对象)。13。静态成员函数若要接见非静态成员,则一定借助于类的对象(对象名或指向对象的函数参数)。4静态成员函数第一是一个成员函数,它能够定义为内联函数,也能够在类体外定义,但此时函数名前不用加重点字static.5能够经过所在类的对象接见静态成员函数(公有的)外,还能够经过类名直接接见,格式为:()6静态成员函数不可以为const成员函数。7513静态成员数据和静态成员函数应用举例例1静态成员数据的定义及应用includeincludeclassCCounterstaticintcount;/定义静态成员数据intobjnumber;/表示对象编号public:CCounter()c
5、ount+;objnumber=count;voidShow()cout”obj”objnumbert”count=”countn;;intCCounter:count=0;/A在类定义外申明静态成员数据并初始化,假如不赋初值,/能够不赋初值,此时系统会自动赋初值0。voidmain()CCounterobj1;obj1.Show();cout”-n“;CCounterobj2;obj1.Show();obj2.Show();cout”-n“;CCounterobj3;obj1.Show();obj2.Show();obj3.Show();履行结果:obj1count=1-obj1count=
6、2obj2count=2-2obj1count=3obj2count=3obj3count=3得注意的是,在创立任何对象以前,类的静态成员数据已经存在并能够引用。例2剖析程序输出的结果类的静态成员数据拥有全局变量的某些特色,在履行main()以前,第一对静态成员数据和全局变量分派储存空间并进行初始化,当整个程序结束时才取消静态成员数据和全局变量,但它只有类的作用域。得注意的是,在创立任何对象以前,类的静态成员数据已经存在并能够引用includeclassAinti;staticintx;public:staticinty;A(inta,intb,intc)i=a,x=b,y=c;voidpri
7、nt()cout”i=”it”x=”xt”y=”yendl;intA:x=0;intA:y=0;voidmain()county=”A:yendl;/B在创立任何对象以前,类中的静态成员数据就已经存在a(11,22,33);a.print();Ab(100,200,300);a.print();b.print();A:y=400;/C,私有静态成员数据不可以够直接赋值。b.print();履行结果:y=0i=11x=22y=33i=11x=200y=300i=100 x=200y=300i=100 x=200y=400例:静态成员数据的生计期静态成员数据也能够是用户自定义种类的数据。#incl
8、ude3classAinti;public:A(intx)i=x;cout”x=”i”t调用结构函数A()n“;A()cout”x=”i”t调用析构函数A()n”;classBstaticAa;申明静态成员数据staticAc;public:B()cout”调用结构函数B()n”;B()cout”调用析构函数B()n”;AB:a(10);/C在类体外申明静态成员数据并初始化AB:c(5);/DAa1(20);/定义用户自定义种类的全局变量并初始化voidmain()cout”main()函数开始!n“;Bb;cout”main()函数结束!n“;履行结果:x=10调用结构函数A()x=5调用结
9、构函数A()x=20调用结构函数A()main()函数开始调用结构函数B()main()函数结束调用析造函数B()x=20调用析造函数A()x=5调用析造函数A()x=10调用析造函数A()注意:在履行main()以前,第一对静态成员数据和全局变量分派储存空间并进行初始化,当整个程序结束时才取消静态成员数据和全局变量。对静态成员数据初始化的次序为它们在类体外申明的次序,如将C行和D行颠倒,则输出的第1行和第2行将要颠倒,最后两行也要颠倒。例3:静态成员函数的定义和使用includevoidnum_Show();classCComputer4floatprice;staticfloattotal
10、;public:staticintnum;/创立对象的个数CComputer(floati)price=i;total+=i;num+;voidshow()cout”Thecomputerpriceis:“priceendl;staticvoidt_show()/静态成员函数num_Show();cout”totalpriceis:“totalendl;/接见静态成员数据total;floatCComputer:total=0;intCComputer:num=0;voidnum_Show()/输出类CComputer静态数据成员numcout”totalnumberis:“CComputer
11、:numendl;voidmain()CComputer:t_show();/经过类名直接接见静态成员函数CComputerc1(3500);c1.show();c1.t_show();CComputerc2(4500);c2.show();CComputer:t_show();/A经过类名直接接见静态成员函数/c1t_show();c2t_show();履行结果:totalnumberis:0totalpriceis:0Thecomputerpriceis:3500totalnumberis:1totalpriceis:3500Thecomputerpriceis:4500totalnumb
12、eris:2totalpriceis:8000/A行经过类名接见此中的公有静态成员函数,该语句与以下任一语句等价:c1t_show();c2t_show();例4:在静态成员函数中经过对象接见类的非静态成员静态成员函数能够直接调用所属类的其余静态成员,但不可以直接接见非静态成员(成员函数和成员数据),若要接见非静态成员,则一定借助于类的对象。#includeclassA5intx;staticinty;public:A(intx1,intx2)x=x1;y=y+x2;staticvoidshow1();staticvoidshow2(Aa);voidA:show1()cout”y=”yendl
13、;/直接接见静态数据voidA:show2(Aa)/cout”x=”a.x”t“”y=”yendl;/cout”x=”x”t“”y=”yendl;/B错,不可以直接接见非静态成员intA:y=6;voidmain()Aa1(11,22);a1.show1();/经过对象名接见A:show2(a1);/经过类名接见Aa2(33,44);A:show1();/经过类名接见a2.show2(a2);/C经过对象名接见对C,可换用用a1.show2(a2);或A:show2(a2);/对show1();同理履行结果:y=28x=11y=28y=72x=33y=72。例7-6z07p226L7-6/pr
14、ogram7-6.cpp#includeclassclaApublic:doublex,y;staticintnum;/公有静态数据成员-供全部对象“共享”/用于记录已经过结构函数生成了多少个对象。claA()x=0;y=0;num+;/每生成一个对象,num加16claA(doublex0,doubley0)x=x0;y=y0;num+;staticvoidstaFun()/静态函数成员,输出静态数据成员num的目前值coutcurrent_num=numendl;intclaA:num=0;/一定在类外(使用类名限制)初始化静态数据成员voidmain()claAobj(1.2,3.4),
15、*p;coutclaA:num=claA:num”t”;claA:staFun();coutobj.num=obj.num”t”;obj.staFun();claAA3;/说明拥有3个对象的数组,将三次调用其结构函数coutclaA:num=claA:num”t”;claA:staFun();p=newclaA(5.6,7.8);生成动向对象*p,将调用结构函数coutclaA:num=claA:num”t”;claA:staFun();coutnum=numstaFun();程序履行后,屏幕显示结果为:claA:num=1current_num=1obj.num=1current_num=1
16、claA:num=4current_num=4claA:num=5current_num=5p-num=5current_num=5注意:将claA类中的数据成员x、y以及num都说明为public公有型的,是为了在主调函数main中能够直接存取它们而使程序简单化,不然(对非公有型的数据成员),在类外存取它们时还要建立近似于getx()那样的公有成员函数。752类的常量成员const与对象、类的成员等联合使用时,会产生一些特别的成效。752.1const对象1const对象的特色与变量近似,即不可以改变const对象中的成员数据,任何改正const对象中的数据的操作在编译时都会犯错。2cons
17、t对象只好接见该cons对象中的const成员函数,而不可以调用其余成员函数。3const对象能够调用const对象的公有成员数据。74const对象不可以被从头赋值,所以在创立对象时一定对该对象中的成员数据初始化,不然将会产生一些随机数。5将一个对象申明为const对象,则该对象中的全部成员数据均是常量。创立const对象时,需要采纳重点字const,一般格式以下:const或const重点字const与的地点能够交换。752.2const成员函数重点字const与成员函数联合的方式有两种:一种是:将const放在成员函数名的前面,表示该函数返回一个常量,该返回值不行改变。与将const放在
18、一般函数名前面近似。第二种是:成员函数所独有的,马上const放在成员函数的参数表以后,此地方说的成员函数专指这类形式。一般格式:()const;此中重点字const是函数种类的构成部分,在说明和定义这个函数时都不可以省去。1不可以在const成员函数中改变其所属类中成员数据的值,2不可以在const成员函数中调用其所属类中的非const成员函数。3const对象只好调用const成员函数。4C+规定以下种类的两个函数:voidPrintAB();voidPrintAB()const;为不一样的函数。关于const放在函数名以前的情况则没有这类规定。5一般对象优先调用非const成员,假如没有
19、非const成员函数,则调用同名的const成员函数。752.3const成员数据const成员数据:只需求对象中的某些成员数据在程序运转过程中保持不变,能够在类中的将这些数据申明为常量种类,称为const成员数据。1const成员数据的申明的方式与一般常量变量的申明方式同样,只需在成员数据的声明以前加重点字const。2const成员数据不可以在定义类时直接赋值,所以一定且只好在类的结构函数中采纳初始化成员列表的方法对该成员数据进行初始化。752.4类的常量成员举例例1const对象的定义和使用includeclassA8inta;public:intb;A(inti,intj);voidS
20、et(inti,intj)a=i;b=j;voidPrint()const/const成员函数cout”a=”a”tb=”bn;:A(inti,intj)a=i;b=j;voidmain()Aconsta1(1,2);/创立const对象,一定对对象初始化,不然将会产生一些随机数constAa2(3,4);a1.Print();/调用const成员函数a2.Print();couta2.bn;/调用公有成员数据/a1.b=10;/A错误,试图改变const对象a1中的成员数据b/a1.Set(10,20);/B错误,试图调用非const成员函数履行结果:a=1b=2a=3b=44例2const
21、成员函数的定义和使用includeclassCSampleinta,b;public:CSample(intx,inty)a=x;b=y;CSample()voidPrintAB();voidPrintAB()const;/const不可以省constvoidTest();voidCSample:PrintAB()cout”调用函数CSample:PrintAB()n“;cout”A=”at”B=”bendl;voidCSample:PrintAB()const/const不可以省cout”调用函数CSample:PrintAB()const!n“;cout”A=”at”B=”bendl;9/
22、a=2;/A/Test();/Bvoidmain()CSamples1(11,22);CSampleconsts2(33,44);s1.PrintAB();s2.PrintAB();运转结果:调用函数CSample:PrintAB()A=11B=22调用函数CSample:PrintAB()const!A=33B=44例3const成员数据的定义和使用includeclassCIncrementintcount;constintincrement;public:CIncrement(intc=0,inti=1);voidaddIncrement()count+=increment:;voidP
23、rint()const;CIncremen:CIncrement(intc,inti):increment(i)/A只好使用此方法。count=c;voidCIncrement:Print()const/increment=2;/B犯错,因为是const种类的成员。cout”count=”count“tincrement=”incrementn;voidmain()CIncrementvalue(10,5);cout”Beforeincrementing:”;valuePrint();for(intj=1;j=3;j+)value.addIncrement();cout”Afterincrement”j”:”;value.Print();履行结果Beforeincrementing:count=10increment=5Afterincrement1:count=15increment=510
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院护士岗位竞争上岗工作方案
- 美容院室内LED显示屏宣传方案
- 投资经纪行业营销策略方案
- 电炉运行成本控制方案
- 便携式土耳其浴室产品供应链分析
- 房产局房屋交易合同模板(2篇)
- 科学装置用隔膜项目营销计划书
- 加油站设备的修理或维护行业相关项目经营管理报告
- 运动训练电子模拟器市场发展前景分析及供需格局研究预测报告
- 2024年品质二手房交易合同(中介参与)
- 中学学生两操管理办法
- 行政职业能力测试分类模拟题科技常识题
- 双减下小学数学作业设计的实践研究课题开题报告
- 高级农机修理工技能鉴定考试题及答案
- 2024-2030年中国采棉机行业发展趋势与投资前景分析报告
- 民间借贷利息计算表
- 2024-2030年中国裸眼3D行业市场全景调研与竞争格局分析报告
- 2024-2030年中国葡萄酒行业市场发展趋势与前景展望战略分析报告
- 2024年统编版小学六年级《道德与法治》上册第四单元 法律保护我们健康成长 9.《知法守法 依法维权》 第一课时 课件
- 信息技术与学科教学融合课教学设计表
- 期中测试卷-2024-2025学年语文六年级上册统编版
评论
0/150
提交评论