C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 4-classes objects-1_第1頁
C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 4-classes objects-1_第2頁
C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 4-classes objects-1_第3頁
C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 4-classes objects-1_第4頁
C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 4-classes objects-1_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

ObjectivesTounderstanddataabstractionfurtherTobeabletoknowwhataclassisandhowtocreateanobjectTo

understandencapsulationandinformationhiding01IntroductiontoStructures03Classesand

Objects02DataAbstraction04AccessControl05EncapsulationandInformationHiding01IntroductiontoStructureIntroductiontoStructuresCase

Study

1Problem:Writeaprogramforagradebookofagivencourse.Agradebookincludescourse’sname,student’sIDandgrade;Inputallinformationoncourseandstudent;Calculatetheaveragegradeofthecourse;Printthegradebook.Requirements:DatastructureA

datastructure

isagroupofdataelementsgroupedtogetherunderonename.structgradeBook{stringcourseName;stringstudentID;intstudentGrade;};Datatypes:built-intypes,e.g.int,char,floatandsoon.IntroductiontoStructuresinCstruct

gradeBook{stringcourseName;stringstudentID[studentNum];intstudentGrade[studentNum];};voidinput(gradeBook&oop);doubleaverage(gradeBook&oop);voidprint(gradeBook&oop);intmain(){gradeBookgbOOP;input(gbOOP);print(gbOOP);return0;}adatatype,auser-definedtypeMembersAstructuretypeisanaggregationofdifferentdatatypesunderonename.Dotoperator(.)Arrowoperator(->)Memberaccessoperatorsvoidinput(gradeBook&oop){cin>>

oop.courseName;for(inti=0;i<studentNum;i++)cin>>

oop.studentID[i]>>

oop.studentGrade[i];}IntroductiontoStructuresinC++struct

gradeBook{stringcourseName;stringstudentID[studentNum];intstudentGrade[studentNum];voidinput(){cin>>courseName;for(inti=0;i<studentNum;i++)cin>>studentID[i]>>studentGrade[i];}doubleaverage(){intsum=0;for(inti=0;i<studentNum;i++)sum+=studentGrade[i];return(double)sum/studentNum;}voidprint(){cout<<

"coursename:"

<<courseName<<endl;for(inti=0;i<studentNum;i++)cout<<studentID[i]<<

"|"

<<studentGrade[i]<<endl;cout<<

"course'saverage:"

<<average()<<endl;}};intmain(){gradeBookgbOOP;gbOOP.input();gbOOP.print();return0;}MemberfunctionsData

membersMembersStructurewithmemberfunctionsIntroductiontoStructureinC++struct

gradeBook{stringcourseName;stringstudentID[studentNum];intstudentGrade[studentNum]={0};voidinput();doubleaverage();voidprint();};intmain(){gradeBookgbOOP;gbOOP.input();gbOOP.print();return0;}void

gradeBook::input(){cin>>courseName;for(inti=0;i<studentNum;i++)cin>>studentID[i]>>studentGrade[i];}double

gradeBook::average(){intsum=0;for(inti=0;i<studentNum;i++)sum+=studentGrade[i];return(double)sum/studentNum;}C++11:InitializerinthestructureDefiningaStructureinCCase

Study

2Problem:WriteaprogramofaDatetype.Adateincludesyear,month,day;Inputallinformationonadate;Printthedate.Requirements:struct

Date{intyear,month,day;};intmain(){Datetoday,d[2];//arraycin>>today.year>>today.month>>today.day;cout<<today.year<<endl;cin>>d[0].year>>d[0].month>>d[0].day;cin>>d[1].year>>d[1].month>>d[1].day;cout<<d[1].year<<d[1].month<<d[1].day<<endl;Date*dptr=&today;//pointerdptr->year=2010;cout<<dptr->year<<dptr->month<<dptr->day<<endl;Date&rd=today;//referencecout<<rd.year<<rd.month<<rd.day<<endl;return0;}Dotoperator(.)Arrowoperator(->)MemberaccessoperatorsDefiningaStructureinCstruct

Date{ intyear,month,day;};voidinput_date(Date&date,int

y,int

m,int

d){date.year=y;date.month=m;date.day=d;}voidprint_date(Date&date){cout<<date.year<<date.month<<date.day<<endl;}intmain(){Datetoday;input_date(today,2017,10,1);print_date(today);return0;}DefiningaStructureinC++struct

Date{intyear,month,day;voidinput_date(inty,intm,intd);voidprint_date();};void

Date::input_date(int

y,int

m,int

d){year=y;month=m;day=d;}void

Date::print_date(){cout<<year<<month<<day<<endl;}intmain(){Datetoday;today.input_date(2016,10,12);today.print_date();return0;}Memberfunctions02DataAbstractionDataAbstractionLogicalpropertiesofthegradeBook,Datestructuredtypes:Threemembervariables,e.g.courseName,studentID,studentGrade,year,month,dayDeclarationoffunctions,e.g.input,average,print,input_date,print_date,…Implementation:DefinitionoffunctionsDataabstractionisdefinedasaprocessofseparatingthelogicalpropertiesofdatafromitsimplementationdetail.Dateabstractionisusedasamethodinanobject-orientedprogramming.AbstractDataTypesDefinitionofaDateADTdataTypeNamegradeBook,DateDomaineachdatatyperepresentsvalues,e.g.courseName,studentID,studentGrade,year,month,dayOperationsInputtheinformationofcourseandstudentsPrintagradebookinputadateprintadateAbstractdatatype(ADT)Adatatypeseparatesthelogicalpropertiesfromtheimplementationdetail.03ClassesandObjectsClassesandObjectsprint_dateinput_dateyear,month,daydateClasses

areanexpandedconceptof

datastructures:likedatastructures,theycancontaindatamembers,buttheycanalsocontainfunctionsasmembers.Classisauser-definedtypeinaprogramminglanguagethatisusedtorepresentanabstractdatatype(ADT).Aclassisasetorcollectionofabstractedobjectsthatsharecommoncharacteristics.printinputcourseName,studentIDstudentGradegradeBookDefinitionofaClassclassDate{

private:

intday;

intmonth;

intyear;

public:

voidinput_date(intd,intm,inty);

voidprint_date();};datamembermemberfunctionsaccesscontrolspecifierClassnameclassclass_name

{accesscontrolspecifier:datamembers;memberfunctions;};Syntaxtodeclareaclasstype

Thecomponentsofaclassarecalledthemembersoftheclass.Themembersoftheclassmaybeeitherdatatypeorfunctions.Dataintheclassarecalleddatamembers.Functionsdeclaredwithintheclassdefinitionarecalledmemberfunctions.DefinitionofaClassconst

intstudentNum=3;class

gradeBook{public:voidinput();doubleaverage();voidprint();private:stringcourseName="";stringstudentID[studentNum]={""};intstudentGrade[studentNum]={0};};memberfunctionsdatamemberClassnameaccesscontrolspecifierDefininganObjectDatemy_birthday;objectDeclarelocalobjectse.g.inanyfunctionDeclareglobalobjectsDeclareobjectsasclassmembersDeclareanobjectarraye.g.Dateday[10];Declareconstantobjectse.g.constDatedayDeclareobjectreferencesorpointerse.g.Date*pDay;Declarestaticobjecte.g.staticDatedayWhenaclassisused,anobjectisdeclared.Date*today;Dated1[3];ConceptofanobjectAnobject

isavariableofaclasstype,orclassinstance.Whenisanobjectdeclared?Inwhichwayisanobjectdeclared?Anobjectisdeclaredinthesameasbuilt-inttypesintmain(){Datetoday;today.input_date(2016,10,12);today.print_date();return0;}HowtoAccessMemberFunctionsinaClassMemberfunctionswithinaclasscanbeinvokedbyaclassvariable(i.e.object).objectaccessingmemberfunctionclassDate{

private:

intday;

intmonth;

intyear;

public:

voidinput_date(intd,intm,inty);

voidprint_date();};DefinitionofMemberFunctionsclass

Date{private:intday,month,year;public:voidinput_date(int

d,int

m,int

y){ day=d;month=m;year=y;}voidadd_year(int

n){year+=n;}voidadd_month(int

n){month+=n;}voidadd_day(int

n){day+=n;}};class

Date{private:intday,month,year;public:voidinput_date(int

d,int

m,int

y);voidadd_year(int

n);voidadd_month(int

n);voidadd_day(int

n);};inline

void

Date::add_year(n){year+=n;}inlinevoidadd_month(int

n){month+=n;}inlinevoidadd_day(int

n){day+=n;}DefinememberfunctionswithinaclassTheinlinefunctionsinstructcompilertoinsertcompletebodyofthefunctionwhereverthatfunctiongotusedincode.intmain(){Dateday;day.input_date(9,8,2020);day.add_year(1);return0;}DefinitionofMemberFunctionsBecausedifferentclassescanhavememberfunctionswiththesamename,wemustspecifytheclassnamewhendefiningamemberfunction.DefinememberfunctionsoutsidetheClassclass

Date{private:intday,month,year;public:voidinput_date(int

d,int

m,int

y);voidadd_year(int

n);voidadd_month(int

n);voidadd_day(int

n);};void

Date::input_date(int

d,int

m,int

y){day=d;month=m;year=y;}void

Date::add_year(n){year+=n;}void

Date::add_month(int

n){month+=n;}voidadd_day(int

n)//error{day+=n;}DefinitionofMemberFunctionsDefinememberfunctionsoutsidetheClassconst

intstudentNum=3;class

gradeBook{public:voidinput();doubleaverage();voidprint();private:stringcourseName="";stringstudentID[studentNum]={""};intstudentGrade[studentNum]={0};};void

gradeBook::input(){cin>>courseName;for(inti=0;i<studentNum;i++)cin>>studentID[i]>>studentGrade[i];}double

gradeBook::average(){intsum=0;for(inti=0;i<studentNum;i++)sum+=studentGrade[i];return(double)sum/studentNum;}void

gradeBook::print(){cout<<

"coursename:"

<<courseName<<endl;for(inti=0;i<studentNum;i++){ cout<<setw(9)<<right<<studentID[i]

<<setw(7)<<right<<studentGrade[i]<<endl;}cout<<

"----------------------------\n";cout<<

"Theaveragegrade:"

<<average()<<endl;}04AccessControlAccessControlclass

Date{private:intday,month,year;public:voidinput_date(int

d,int

m,int

y);voidadd_year(int

n);voidadd_month(int

n);voidadd_day(int

n);};accessspecifierAccesscontrol

isenforcedatcompiletime,notatrun-time.Whenamemberisaccessed,thecompilercheckstheaccessspecifierforit.Anaccessspecifierisoneofthreekeywords:private,publicorprotectedclass

Date{intday,month,year;public:voidinput_date(int

d,int

m,int

y);voidadd_year(int

n);voidadd_month(int

n);voidadd_day(int

n);};class

Date{public:voidinput_date(int

d,int

m,int

y);voidadd_year(int

n);voidadd_month(int

n);voidadd_day(int

n);private:intday,month,year;};class

Date{public:voidinput_date(int

d,int

m,int

y);private:voidadd_year(int

n);voidadd_month(int

n);voidadd_day(int

n);private:intday,month,year;};AccessControlTheprivatepartofthememberswithinaclasscanbeusedonlybymemberfunctionsofthisclass.(default)Thepublicpartofthememberswithaclasscanbeusedbymemberfunctionsofthisclassorotherfunctionsoutsidetheclass.intmain(){Datetoday;today.input_date(12,9,2021);return0;}accessspecifier-privateaccessspecifier-publicclass

Date{public:voidinput_date(int

d,int

m,int

y);voidadd_year(int

n);voidadd_month(int

n);voidadd_day(int

n);private:intday,month,year;};voidDate::input_date(int

d,int

m,int

y){day=d;month=m;year=y;}intmain(){Datetoday;today.day=15;//errorreturn0;}05EncapsulationandInform

溫馨提示

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

評論

0/150

提交評論