




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
回顧第2章類和對象對象、對象的兩個要素類面向對象程序設計的三大特性類的定義對象的定義與使用1第3章關于類和對象的進一步討論本章內容3.1構造函數3.2析構函數3.3調用構造函數和析構函數的順序
3.4對象數組3.5對象指針3.6共用數據的保護3.7對象的動態建立和釋放3本章內容3.8對象的賦值和復制3.9靜態成員3.10友員
3.11函數模板與類模板4目標理解構造函數與析構函數的作用;熟練掌握構造函數和析構函數的定義和使用。掌握對象數組、對象指針的使用,以及對象的動態建立與釋放;了解對象的賦值與復制理解靜態成員和友元的作用熟練掌握靜態成員和友元的定義與使用了解函數模板與類模板的定義與使用5本章內容3.1構造函數
3.2析構函數3.3調用構造函數和析構函數的順序3.4對象數組3.5對象指針3.6共用數據的保護3.7對象的動態建立和釋放63.1構造函數
3.1.1對象的初始化定義對象時最好能給對象的數據成員進行初始化,但不能在類的聲明中進行。例如:classTime{private:
inth=0;//錯誤!!
};類是個抽象的自定義數據類型,不占存儲空間,無法存儲數據73.1構造函數
3.1.2構造函數的作用構造函數是類中一種特殊的成員函數。構造函數的作用是在系統創建對象時,給對象的數據成員進行初始化。格式:類名([參數表]){函數體;}注意類外定義的格式83.1構造函數
3.1.2構造函數的作用構造函數的特點1、構造函數名字必須與類名相同,不具有任何類型,也不返回任何值。2、構造函數的權限必須是public。3、構造函數不需要也不能被用戶調用,而是在建立對象時由系統自動調用執行。4、每個類都必須有一個構造函數,用戶沒有定義時,系統會自動生成一個空的構造函數。93.1構造函數
3.1.3無參和帶參的構造函數(一)無參數的構造函數(默認構造函數)格式:類名(){數據成員=初始值;}對象的定義格式:類名對象名;103.1構構造函數無無參和帶帶參的構造函函數(二)帶參數數的構造函數數類名(類型1參數1,,類型2參參數2,………){數據成員1==參數1;數據成員2==參數2;………}對象的定義格格式為:類名對象象名(實參1,實參2,,……);113.1構構造函數用用參數初初始化表對數數據成員初始始化參數初始化表表——對數據成成員的初始化化放在函數首首部實現。格式:類名(類型1參數1,類型2參數2,……):數據成員1((參數1),,數據成員2(參數2)),………{}對象的定義格格式為:類名對象象名(實參1,實參2,,……);123.1構構造函數構構造函數數的重載定義在一個類中可可以定義多個個構造函數,,其參數的個個數、順序或或類型不相同同。調用建立對象時,,系統將根據據對象的實參參個數、類型型去匹配對應應的構造函數數。133.1構構造函數帶帶默認參參數的構造函函數格式:類名(類型1參數1=默認值1,類型2參參數2=默認值2,……){數據成員1==參數1;數據成員2==參數2;………}14構造函數補充充說明在調用構造函函數時,不必必給出實參的的構造函數,,稱之為默認構造函數數全部參數都指指定了默認值值的構造函數數也屬于默認認構造函數一個類只能有一個默認構造函數數定義了全部是是默認參數的的構造函數后后,不能在定定義重載構造造函數如果定義了任任何其他的構構造函數,編編譯器就不會會為你自動生生成缺省的構構造函數153.2析析構函數(一)析構函函數的作用析構函數的作作用是在系統統撤銷對象占占用的內存之之前,完成一一些清理工作作。格式~類名(){函數體;}163.2析析構函數(二)析構函函數的特點1、析構函數數名是在類名名前加“~””,無返回類類型,無參數數。2、析構函數數無參數,故故不能被重載載。3、當系統撤撤銷對象之前前將調用析構構函數。P78注意:析構函數也可被用戶當普通通函數進行調調用,但不影影響系統在撤撤銷對象時的的自動調用。。17classStudent{private:char*pName;public:Student(){pName=newchar[20];}~Student(){delete[]pName;}};18類和對象類數據成員成員函數對象數據成員數據成員對象19小結構造函數構造函數的作作用構造函數的特特點無參和帶參的的構造函數用參數初始化化表對數據成成員初始化構造函數的重重載帶默認參數的的構造函數析構函數析構函數的作作用析構函數的特特點20本章內容3.1構構造函數3.2析析構函數3.3構構造函數和析析構函數的調調用順序3.4對對象數組3.5對對象指針3.6共共用數據的的保護3.7對對象的動態態建立和釋放放213.4對對象數組對象數組指由同類的多多個對象構成的集合。。(一)對象數數組定義格式式:類名對象數數組名[常量量表達式];;類名對象數數組名[常量量表達式1][常量表達達式2];;223.4對對象數組對象數組(二)對象數數組的初始化化格式類名對象數數組名[常量量表達式]=={類名(實參列表1),類名(實參列表2),……};233.4對對象數組對象數組(三)數組元元素的存取格格式:對象數組名[下標].數數據成員對象數組名[下標].成成員函數24本章內容3.1構構造函數3.2析析構函數3.3對對象的賦值和和復制3.4對對象數組3.5對對象指針3.6共共用數據的的保護3.7對對象的動態態建立和釋放放253.5對對象指針指指向對象象的指針指指向對象象成員的指針針3.5.3this指針263.5對對象指針指指向對象象的指針定義格式:類名*對象指針針名訪問格式:對象指針->數據成員對象指針->成員函數((實參列表))273.5對對象指針指指向對象象的指針例如:Timet1(10,30,30);t1.ShowTime();Time*p;p=&t1;p->SetTime(8,0,0);t1.ShowTime();283.5對對象指針指指向對象象成員的指針針(一)指向對對象數據成員員的指針定義格式:類型*指針變量量名訪問格式:指針變量名==&對象.成成員名;注意:所指向的數據據成員必須為為public。293.5對對象指針指指向對象象成員的指針針(一)指向對對象數據成員員的指針定義格式:類型*指針變量量名訪問格式:指針變量名==&對象.成成員名;例如:Timet1(10,30,30);int*p;p=&t1.h;//若h為public成員303.5對對象指針指指向對象象成員的指針針(二)指向對對象成員函數數的指針1、指向普通通函數的指針針函數在編譯時時被分配到一一個入口地址址,稱為函數數的指針。函數名代表該該函數的入口口地址。313.5對對象指針指指向對象象成員的指針針(二)指向對對象成員函數數的指針1、指向普通通函數的指針針定義形式:返回類型(*指針變量量名)(形參列表))賦值形式:指針變量名==函數名323.5對對象指針指指向對象象成員的指針針(二)指向對對象成員函數數的指針1、指向普通通函數的指針針函數調用形式式:函數名(實參參)(*指針變量量名)(實參列表))舉例:sum函數333.5對對象指針指指向對象象成員的指針針(二)指向對對象成員函數數的指針2、指向對象象成員函數的的指針舉例:時間類類Time34#include<iostream>usingnamespacestd;classTime{inth,m,s;public:Time(inthh=0,intmm=0,intss=0){h=hh;m=mm;s=ss;}voidShowTime(){cout<<h<<":"<<m<<":"<<s<<endl;}};353.5對對象指針指指向對象象成員的指針針(二)指向對對象成員函數數的指針2、指向對象象成員函數的的指針定義形式:返回類型((類名::*指針變量量名)(形參參列表)賦值形式:指針變量名==&類名::成員函數名注意:所指向向的成員函數數必須為public。。363.5對對象指針指指向對象象成員的指針針(二)指向對對象成員函數數的指針2、指向對象象成員函數的的指針函數調用形式式:對象.成員員函數名(實實參)(對象.*指針變量名)(實參列表))注意:定義時用類名,使用時用對象名373.5對對象指針3.5.3this指針每一個成員函函數都有一個個隱含的特殊殊指針——this指針針。This指針針的值為當前前調用的該成成員函數的對對象的首地址址。例如:38類和對象成員函數對象數據成員數據成員對象39classTime{inth,m,s;public:voidSetTime(inth=0,intm=0,ints=0){this->h=h;this->m=m;this->s=s;}voidShowTime(){cout<<h<<":"<<m<<":"<<s<<endl;}};40本章內容3.1構構造函數3.2析析構函數3.3對對象的賦值和和復制3.4對對象數組3.5對對象指針3.6共共用用數數據據的的保保護護3.7對對象象的的動動態態建建立立和和釋釋放放413.6共共用用數數據據的的保保護護常常對對象象常常對對象象成成員員指指向向對對象象的的常常指指針針指指向向常常對對象象的的指指針針變變量量對對象象的的常常引引用用42本章章內內容容3.1構構造造函函數數3.2析析構構函函數數3.3析析構構函函數數和和構構造造函函數數的的調調用用順順序序3.4對對象象數數組組3.5對對象象指指針針3.6共共用用數數據據的的保保護護3.7對對象象的的動動態態建建立立和和釋釋放放433.7對對象象的的動動態態建建立立與與釋釋放放3.7對對象象的的動動態態建建立立與與釋釋放放動態態創創建建和和撤撤銷銷一一個個對對象象指針針名名==new類名名((初初值值));;delete指針針名名;;注意意1、、使使用用new創創建建對對象象時時自自動動調調用用構構造造函函數數,,delete撤撤銷銷對對象象之之前前自自動動調調用用析析構構函函數數;;2、、動動態態創創建建的的對對象象必必須須使使用用delete進進行行撤撤銷銷。。443.7對對象象的的動動態態建建立立與與釋釋放放3.7對對象象的的動動態態建建立立與與釋釋放放動態態創創建建和和撤撤銷銷一一維維對對象象數數組組對象象指指針針==new類名名[數數組組大大小小];;delete[]對對象象指指針針;;注意意1、、構構造造函函數數和和析析構構函函數數的的調調用用次次數數與與數數組組的的大大小小相相同同。。2、、此此時時只只能能調調用用默默認認構構造造函函數數,,不不能能給給參參數數3、、注注意意構構造造函函數數和和析析構構函函數數的的調調用用順順序序。。45本章章內內容容3.1構構造造函函數數3.2析析構構函函數數3.3析析構構函函數數和和構構造造函函數數的的調調用用順順序序3.4對對象象數數組組3.5對對象象指指針針3.6共共用用數數據據的的保保護護3.7對對象象的的動動態態建建立立和和釋釋放放46本章章內內容容3.8對對象象的的賦賦值值和和復復制制3.9靜靜態態成成員員3.10友友元元3.11函函數模板板與類模模板473.8對對象象的賦值值和復制制對對象的的賦值格式對象名1=對象象名2例如:Timet1(10,30,0),t2;t2=t1;作用將對象2的數據成員員的值依次次賦值給給對象1;注意對象1和和對象2必須是是同類的的已定義對象。483.8對對象象的賦值值和復制制對對象的的復制作用———利用已有有對象復復制出新新的對象象。格式:類名新對象(已已有對象象);或類名新對象=已已有對象象;建立新對對象時自動調用復制制構造函函數。49本章內容容3.8對對象的的賦值和和復制3.9靜靜態成成員3.10友友元3.11函函數模板板與類模模板503.9靜靜態態成員問題引入入在類的定定義中,,如何描描述類的的所有對對象所共共享的數數據?例如對于之前前定義的的表示時時間信息息的類Time,如何何統計Time類的對對象的個個數?513.9靜靜態態成員解決方法法方法一::定義全局局變量或或對象缺點:不不安全,,任何功功能模塊塊都可以以更改;;方法二::定義靜態態的數據據成員優點:可可實現共共享,并并保證安安全性。。靜態成員員靜態數據據成員靜態成員員函數523.9靜靜態態成員靜靜態數據據成員與普通數數據成員員的區別別普通數據據成員是是屬于對象象的,即在在類的每每一個對對象中都都擁有一一個拷貝貝。靜態數據據成員是是屬于整個個類的,即每每個類只只有一個個拷貝,,該類所所有對象象都共同同擁有和和使用。。53voidfun(){staticinti=0;i++;cout<<i<<endl;}voidmain(){for(intk=0;k<3;k++)fun();fun();}//只被被賦值一一次,程程序退出出時消失失543.9靜靜態態成員靜靜態數據據成員定義方式式(一)在類內聲聲明靜態態數據成成員static類型名成成員員名;例如:classTime{………staticintcount;};553.9靜靜態態成員靜靜態數據據成員定義方式式(一)在類內聲聲明靜態態數據成成員static類類型型名成成員名名;注意:1、靜態態數據成成員同樣樣具有訪訪問控制制權限。。2、靜態態數據成成員具有有靜態生生存期,,即在程程序開始始時,系系統為其其分配存存儲空間間,當程程序結束束時撤銷銷。和對象的的生死無無關563.9靜靜態態成員靜靜態數據據成員定義方式式(二)在類外進進行初始始化類型類名::靜靜態數數據成員員名==初初始值值注意:1、必須初始化,,且必須在類外進進行初始始化。P1032、初始始化時不加static。。3、靜態態成員名名前必須說明類屬屬。573.9靜靜態成員靜靜態數據成成員訪問方式方法一類名::靜態數據成成員名方法二對象名.靜靜態數據據成員名注意:靜態數據成員員同樣具有訪問控制限制制,因此,必須須聲明為public的的,才能在類類外訪問。583.9靜靜態成員靜靜態數據成成員應用舉例定義靜態數據據成員count統計Time類當當前對象的個個數。59練習定義一個學生生類,包括學學號、姓名、、語文成績。。要求:統計N個學生生的平均成績績,并能輸出出學生總數以以及平均成績績60練習分析程序執行行結果見Static.txt613.9靜靜態成員靜靜態成員函函數特點只能存取類的靜態態數據成員定義格式在成員函數聲聲明的前面加加上關鍵字static調用形式類名::靜態成員員函數名((實參列表表)對象.靜靜態成員函數數名(實實參列表)623.9靜靜態成員靜靜態成員函函數注意在靜態成員函函數中不能直接訪問非靜靜態成員,若若要訪問非靜靜態成員,必須通過參參數傳傳遞的的方式式得到到相應應的對對象,,再通通過對對象來來訪問問。例63練習編寫程程序實實現賓賓館住住宿客客人管管理。。客人類類Guest客人編編號Num(按按先后后順序序自動動生成成)姓名Name住宿房房號Room房費fee客人總總數Count提供構構造函函數,,顯示示信息息函數數Display,,以及及返回回客人人總數數函數數GetCount等。。創建建3個個客人人對象象進行行測試試。64本章內內容3.8對對象象的賦賦值和和復制制3.9靜靜態態成員員3.10友友元3.11函函數模模板與與類模模板653.10友友元元((員員))友元元的的作作用用該類類外外部部的的函函數數或或其其他他類類通通過過聲聲明明為為友友元元關關系系,,從從而而可可訪訪問問該該類類的的私私有有成成員員。。即B是是A的的友友元元,,則則B可可訪訪問問A的的私有有成員員。。友元元的的分分類類友元元函函數數::普普通通函函數數和和類類的的成成員員函函數數;;友元元類類663.10友友元元友友元元函函數數(一一))將將普普通通函函數數聲聲明明為為友友元元函函數數普通通函函數數作作友友元元的的聲聲明明格格式式friend類類型型友友元元函函數數名名((參參數數列列表表))注意意1、、該該函函數數一一般般只只在類類中中聲聲明明為友友元元,,函函數數的的定義義在在類類外外。2、、友友元元的的聲聲明明可可在在類類中中任何何位位置置。673.10友友元元友友元元函函數數(二二))將將成成員員函函數數聲聲明明為為友友元元函函數數應用用舉舉例例定義義表表示示學學生生類類Student;;定義義教教師師類類Teacher;;在Teacher類類中中提提供供一一個個用用于于修修改改學學生生成成績績的的成成員員函函數數。。683.10友友元元友友元元函函數數(二二))將將成成員員函函數數聲聲明明為為友友元元函函數數成員員函函數數作作友友元元的的聲聲明明格格式式friend類類型型類名名::友友元元函函數數名名((參參數數))提前前引引用用聲聲明明class類類名名;;69Classteacher{Voidsets(…………){}}Voidteacher::sets(..){cin>>st.score;}Classstudent{Private:intnum;floatscore;Public:student(intn,floats){num=n;score=s;}FriendVoidteacher::sets(……);}Student[&]st70友友元元函函數數(二二))將將成成員員函函數數聲聲明明為為友友元元函函數數注意意::1、、兩兩個個類類聲聲明明的的先先后后順順序序。。包含含friend關鍵鍵字字的的那那個個類類后聲明明2、、友友元元函函數數應應先先在在類類中中聲聲明明,,其其定定義義應應放放在在兩兩個個類類的的聲聲明明后后面面。。713.10友友元元友友元元類類作用用類B是是類類A的的友友元元類類,,則則B中中所所有有的的成成員員函函數數都都是是A的的友友元元函函數數,,即即所所有有B的的成成員員函函數數都都能能訪訪問問A的的私私有有數數據據成成員員。。友元元類類的的聲聲明明格格式式friend類類名名;;例如如此時時那那個個類類在在前前都都可可以以,,注注意意提提前前引引用用聲聲明明即即可可。723.10友友元元友友元元類類說明明((P111))友元元關關系系是是單向向的,,而而不不是是雙雙向向的的。。友元元關關系系不具具有有傳傳遞遞性性。73本章章內內容容3.8對對象象的的賦賦值值和和復復制制3.9靜靜態態成成員員3.10友友元元3.11模模板板74模模板板的的概概念念(一一))什什么么是是模模板板??一種種通通用用的的函函數數和和類類的的設設計計方方法法,,即即將將函函數數或或類類處處理理的的數據據類類型型進進行行參參數數化化,在在使使用用時時再再對對數數據據類類型型進進行行實實例例化化。。(二二))作作用用實現現代代碼碼重用用,提提高高程程序序開開發發效效率率。。(三三))模模板板的的分分類類函數數模模板板類模模板板75函函數數模模板板(一一))函函數數模模板板的的聲聲明明template<classT1,,classT2……><返返回回類類型型><函函數數名名>((參參數數表表)){//函函數數體體定定義義}注意意::T1,,T2是是參參數數化化類類型型,,class也也可可寫寫為為typename。76類類模模板板(一一))問問題題引引入入舉例例1、、定定義義對對兩兩個個整整數數進進行行比比較較的的類類Compare_int。。2、、定定義義對對兩兩個個實實數數進進行行比比較較的的類類Compare_double。。77類類模模板板(一一))問問題題引引入入classCompare_int{intx,y;public:Compare(inta,intb){x=a;y=b;}intmax(){returnx>y?x:y;}intmin(){returnx<y?x:y;}};78類類模模板板(一一))問問題題引引入入classCompare_double{doublex,y;public:Compare(doublea,doubleb){x=a;y=b;}doublemax(){returnx>y?x:y;}doublemin(){returnx<y?x:y;}};79類類模模板板(一一))問問題題引引入入template<classT>classCompare{Tx,y;public:Compare(Ta,Tb){x=a;y=b;}Tmax(){returnx>y?x:y;}Tmin(){returnx<y?x:y;}};80類類模模板板(二二))類類模模板板的的定定義義1、、定定義義格格式式template<classT1,classT2,……>class類類模模板板名名{//類類成成員員定定義義;;};;其中中::class也也可可寫寫為為typename;81類類模模板板(二二))類類模模板板的的定定義義2、、成成員員函函數數在在類類體體外外的的定定義義格格
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司對外借款管理制度
- 公司法務文件管理制度
- 浪潮項目消防管道安裝技術交底
- 江蘇開放大學2025年春財務報表分析第三次模擬練習題
- 河南省安陽市2024~2025學年 高二下冊3月月考數學試卷附解析
- 海南省部分中學2024~2025學年 高二下冊期中模擬考試數學試卷附解析
- 安徽省淮南等校聯考2023?2024學年高一下冊期末考試數學試卷附解析
- 2025屆四川省廣元市九年級第二次學業水平測試監測數學試卷含答案
- 2025屆廣東省湛江市赤坎區等2地中考二模數學試卷
- 離子交換技術在重金屬工業廢水資源化利用中的應用研究-洞察闡釋
- 電動執行器課件
- 旅游消費者行為學(第3版)章后參考答案與提示
- 出租車自動計費器設計專業課程設計方案報告模板
- 移液器自校準SOP
- 機動車維修經營備案表
- Python入門基礎教程全套課件
- 壓力容器日常使用狀況、交接班和運行故障處理記錄表
- 工業紙板(瓦楞紙箱企業)全套管理規章制度匯編(組織架構、崗位職責說明、企業制度)
- 石油化工企業可燃氣體和有毒氣體檢測報警設計規范
- 精囊疾病超聲診斷
- 氣候類型及自然帶知識歸納表
評論
0/150
提交評論