C-程序設(shè)計(jì)教學(xué)課件Chapter-3-class-and-object_第1頁
C-程序設(shè)計(jì)教學(xué)課件Chapter-3-class-and-object_第2頁
C-程序設(shè)計(jì)教學(xué)課件Chapter-3-class-and-object_第3頁
C-程序設(shè)計(jì)教學(xué)課件Chapter-3-class-and-object_第4頁
C-程序設(shè)計(jì)教學(xué)課件Chapter-3-class-and-object_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

C++ProgrammingChapter3ClassesandObjectsIndex1Ogramming2ClassesandObjects2.1Classes2.2Objects2.3this3ConstructorsandDestructors3.1Constructors3.2TheCopyConstructor3.3Destructors4CompositionIndex5Static5.1StaticDataMembers5.2StaticMemberFunctions6Constant6.1ConstantObjects6.2ConstantMemberFunctionsChap.3ClassesandObjects1Ogramming1OgrammingTherealworldProgramminglanguageThingsAbstractObjectsinstanceattributesbehaviorsAbstractInstantiateClassesAnewtypedatamethods1Ogramming

StructuredProgrammingvs.Object-OrientedProgrammingStructural(Procedural)Object-OrientedProgramProgramFUNCTIONCLASSOperationsFUNCTIONDataCLASSCLASSOperationsFUNCTIONOperationsDataData1OgrammingTheBlueprintofthecarclassobjects....IndependentofothersChap.3ClassesandObjects2ClassesandObjects2.1Classes

InC++,aclassisadatatype,Inobject-orienteddesign,aclassisacollectionofobjects.

Syntax:classclass_name{public:publicmembers(interface)private:privatemembersprotected:protectedmembers};2.1Classes

Accesscontrolmodifier:controlaccesstoclasses’member

Public:canbeaccessedanywhere

Protected:canbeaccessedbyselfclass,subclassandfriendfunction

private:

canbeaccessedbyselfclassandfriendfunction

Defaultaccesscontrolmodifierformember2.1Classes

InC++,themembervariablesorfieldsarecalleddatamembers.

Thefunctionsthatbelongtoaclassarecalledfunctionmembers.

Inobject-orientedlanguagesgenerally,suchfunctionsarecalledmethods.2.1ClassesExample:classClock{public:voidSetTime(intNewH,intNewM,intNewS);voidShowTime()//Functionmembers{//Definedinsidetheclasscout<<Hour<<":"<<Minute<<":"<<Second;}private:intHour,Minute,Second;//Datamembers};2.1ClassesvoidClock::SetTime(intNewH,intNewM,intNewS){//DefinedoutsidetheclassHour=NewH;Minute=NewM;Second=NewS;}

Remarks:

Methodscanbeimplementedeitherinsideoroutsidethedeclarationoftheclass.Ifthemethodsareimplementedinsidetheclass,thentheyturntobetheinlinefunctions.Ifthemethodsareimplementedoutsidetheclass,theandscoperesolutionshouldbeused.

2.2Objects

Objects

Theinstanceofclasses

Avariableoftheuser-defineddatatypes

wecandefined:

Object:ClockmyClock;

Objectpointer:Clock*myClock;

Objectreference:Clock&myClock;2.2Objects

Insidetheclass,wecanaccessanytypeofmembers,andmembersareaccesseddirectlybynames.

Outsidetheclass

Privatememberscannotbeaccessed

ToObjectandobjectreference,membersareaccessedby“.”myClock.showTime();

ToObjectpointer,membersareaccessedby“->”pClock->showTime();2.2ObjectsExample:intmain(){Clocks1,s2,*ps;s1.setTime(18,34,56);s2.setTime(9,0,0);ps=&s2;s1.showTime();ps->showTime();return0;Output:18:34:569:0:0}2.3this

Objectsofoneclasshavetheirowndatamembersandsharethesamecopyofmethods.object1object2object3data1data2data1data2data1data2method1method22.3this

thispointer

Everyobjecthasathispointer

Thispointerpointstotheobjectitself

Callinganon-staticmemberfunctionofanobject

Thethispilerwhichobjectaccessthefunction.

thispointer,asanimplicitparameter,ispassedtoeveryfunction2.3thisExample:voidClock::SetTime(intNewH,intNewM,intNewS,/*Clock*this*/){this->Hour=NewH;this->Minute=NewM;this->Second=NewS;}2.3this

Globalvariablesandfunctions:inoneclass,howtoaccesstheglobalvariablesandfunctions.Example:intn=0;classCTest{//globalvariableintn;intdemo(){cout<<::n<<‘\n’;//usetheglobalvariablencout<<n<<‘\n’;}}Chap.3ClassesandObjects3ConstructorsandDestructors3.1Constructors

Howtoinitializedatamember?

Inthedefinitionofclass?Example:private:inta=100;//Wecannotknowwhichobjectthedatabelongto!

Assignvaluetodatamemberofobject?Example:clockc={8,30,10};//Datamemberisprivate!

Defineainitializingfunctionmember?Example:voidinitiate{hour=8;minute=30;second=20}//Itistootired!

Constructors:Initializethedatamemberofanobjectwhentheobjectiscreated3.1Constructors

Aconstructorisamethod

Wis.

Automaticallycalledwhenanobjectiscreated

Withoutreturntype

Canbeoverloaded:Asuitableconstructorisinvokedautomaticallywheneveraninstanceoftheclassiscreated.

Canbedefaultargumentsfunction3.1ConstructorsExample:classclock{private:inthour,minute,second;public:clock(){hour=8;minute=0;second=0;cout<<"theclockis"<<hour<<":"<<minute<<":"<<second<<endl;}clock(intpHour,intpMinute,intpSecond){hour=pHour;minute=pMinute;second=pSecond;cout<<"theclockis"<<hour<<":"<<minute<<":"<<second<<endl;}};3.1Constructorsintmain(){clockc1;clockc2(12,30,50);return0;}Output:Theclockis8:0:0Theclockis12:30:503.1Constructors

Defaultconstructors

Ifaclasshasnoconstructor,adefaultconstructorwillbeinvoked.

Thedefaultconstructorjustcreatesobjectwithoutanyinitialization.

Ifaclasshasaconstructor,C++videdefaultconstructor.3.2Destructors

Thedestructorisautomaticallyinvokedwheneveranobjectbelongingtoaclassisdestroyed.classClassName{public:ClassName(arguments);ClassName(ClassName&object);~ClassName();//destructor};ClassName::~ClassName()//destructor{//……}3.2Destructors

Remarks:

Thedestructortakesnoargumentsandcannotbeoverloaded.

Thedestructorhasnoreturntype.

TheC++compilerwillautomaticallycreateadestructorifwedon’tmakeit.3.3TheCopyConstructor

Copyconstructorcreatesanewobjectasacopyofanotherobject.

Syntax:classClassName{public:ClassName(arguments);//constructorClassName(ClassName&object);//copyconstructor...};3.3TheCopyConstructorExample:classPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;}Point(Point&p){X=p.X;Y=p.Y;cout<<"copyconstructorisinvoked."<<endl;}intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};3.3TheCopyConstructor

A)IfanobjectisinitializedbyanotherobjectoftheRules:sameclass,thecopyconstructorisinvokedautomatically.Example:voidmain(void)Output:copyconstructorisinvokedcopyconstructorisinvoked11{PointA(1,2);PointB(A);//copyconstructorisinvokedPointC=A;//copyconstructorisinvokedcout<<B.GetX()<<“”<<C.GetX()<<endl;}3.3TheCopyConstructor

B)IftheargumentsofthefunctionisanobjectofaRules:class,thecopyconstructorisinvokedwhenthefunctionisinvoked.voidfun1(Pointp){cout<<p.GetX()<<endl;}Output:voidmain(){copyconstructorisinvokedPointA(1,2);fun1(A);//copyconstructorisinvoked1}3.3TheCopyConstructor

C)Ifthefunctionreturnsanobjectofaclass,theRules:copyconstructorisinvoked.Pointfun2(){PointA(1,2);returnA;//copyconstructorisinvoked}voidmain(){PointB;B=fun2();Output:}copyconstructorisinvoked3.3TheCopyConstructor

Ifaclasshasresource,copymaybe:

Shallowcopy

Defaultcopyconstructor

OnlycopytheaddressoftheresourceObject1ResourceObject2

Deepcopy

User-definedcopyconstructor

CancopytheresourceObject1ResourceObject2ResourceExample1Example2Chap.3ClassesandObjects4Composition4Composition

Composition

Createobjectsofyourexistingclassinsidethenewclass.

Tposedofobjectsofexistingclasses(calledsubobject).

Enhancethereusabilityofsoftware4CompositionExample:classPoint{private:classLine{private:floatx,y;public:Pointp1,p2;Point(floath,floatv);floatGetX(void);floatGetY(void);voidDraw(void);public:Line(Pointa,Pointb);VoidDraw(void);};};4Composition

Theinitializationofsubobject

Whenanobjectiscreated,itssubobjectsshouldbeinitialized

Thenewclassconstructordoesn’thavepermissiontoaccesstheprivatedataelementsofthesubobject,soitcan’tinitializethemdirectly

Simplesolution:calltheconstructorforthesubobject4Composition

OrderofConstructor&Destructorcalls

Constructor:

1)memberobjectconstructors

2)constructoroftheclass

Destructor:

destructorarecalledinexactlythereverseorderoftheconstructors

Ifthedefaultconstructorisinvoked,thedefaultmemberobjectconstructorsareinvoked,too.

Question:canweconstructthesubobjectinthebodyofclassconstructor?4Composition

MemberinitializerlistSyntax:ClassName::ClassName(argument1,argument2,……):subobject1(argument1),subobject2(argument2),......{//……}

Example:WholeandPart4Composition

Question:canweinitiatetheconstmemberorreferencememberinthebodyofclassconstructor?

Memberinitializerlistmondatamembers,referencedatamembersandconstmembers.classSillyClass{public:SillyClass(int&i):ten(10),refI(i){}protected:ten;int&refI;};Chap.3ClassesandObjects5Static5.1StaticDataMembers

Staticdatamember

Thereisasinglepieceofstorageforastaticdatamember,regardlessofhowmanyobjectsofthatclassyoucreate.

Itisawayforthemto“communicate”witheachother.

Thestaticdatabelongstotheclass;isscopedinsidetheclassanditcanbepublic,private,orprotected.

Remarks:

Alltheobjectsownonecopyofthestaticdatamembersinaclass.

Staticdatamembersmustbeinitializedoutsidetheclass.5.1StaticDataMembersExample:#include<iostream>spacestd;classPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;countP++;}Point(Point&p);intGetX(){returnX;}intGetY(){returnY;}voidGetC(){cout<<"Objectnum="<<countP<<endl;}private:intX,Y;countP;};5.1StaticDataMembersPoint::Point(Point&p){X=p.X;Y=p.Y;countP++;}intPoint::countP=0;//initializedoutsidetheclassPointvoidmain(){PointA(4,5),B;A.GetC();PointC(A);C.GetC();Output:Objectnum=1Objectnum=3}5.2StaticMemberFunctions

Staticmemberfunctions

Likestaticdatamembers,staticmemberfunctionsworkfortheclassratherthanforaparticularobjectofaclass.

Staticmemberfunctionscanonlyaccessthestaticdatamemberandstaticmemberfunctionsofthesameclass.

Sandscoperesolution.5.2StaticMemberFunctionsExample:#include<iostream>spacestd;classPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;countP++;}Point(Point&p);intGetX(){returnX;}intGetY(){returnY;}staticvoidGetC(){cout<<"Objectid="<<countP<<endl;}private:intX,Y;countP;}5.2StaticMemberFunctionsPoint::Point(Point&p){X=p.X;Y=p.Y;countP++;}intPoint::countP=0;voidmain(){PointA(4,5);cout<<"PointA,"<<A.GetX()<<","<<A.GetY();A.GetC();PointB(A);cout<<"PointB,"<<B.GetX()<<","<<B.GetY();Point::GetC();//andscoperesolution//usingobject}Chap.3ClassesandObjects6Const6Constant

Constant

Constantisjustlikeavariable,exceptthatitsvaluecannotbechanged.

Themodifierconstrepresentsaconstant.

constintx=10;

InC++,aconstmustalways

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論