




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
回顧第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構構造函數數3.1.3無參參和帶參的的構造函數數(二)帶參參數的構造造函數類名(類型型1參數數1,類型型2參參數2,………){數據成員1=參數1;數據成員2=參數2;………}對象的定義義格式為::類名對對象名(實實參1,實實參2,………);113.1構構造函數數3.1.4用參參數初始化化表對數據據成員初始始化參數初始化化表——對數據據成員的初初始化放在在函數首部部實現。格式:類名(類型型1參參數1,類類型2參參數2,……)):數據成員1(參數1),數據據成員2((參數2)),………{}對象的定義義格式為::類名對對象名(實實參1,實實參2,………);123.1構構造函數數3.1.5構造造函數的重載定義在一個類中中可以定義義多個構造造函數,其其參數的個個數、順序序或類型不不相同。調用建立對象時時,系統將將根據對象象的實參個個數、類型型去匹配對對應的構造造函數。133.1構構造函數數3.1.6帶帶默默認認參參數數的的構構造造函函數數格式式::類名名((類類型型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.1指指向對對象的指指針3.5.2指指向對對象成員員的指針針3.5.3this指針針263.5對對象象指針3.5.1指指向向對象象的指指針定義格格式::類名*對對象象指針針名訪問格格式::對象指指針-->數數據成成員對象指指針-->成成員函函數((實參參列表表)273.5對對象象指針針3.5.1指指向向對象象的指指針例如::Timet1(10,30,30);t1.ShowTime();Time*p;p=&t1;p->SetTime(8,0,0);t1.ShowTime();283.5對對象象指針針3.5.2指指向向對象象成員員的指指針(一))指向向對象象數據據成員員的指指針定義格格式::類型*指指針針變量量名訪問格格式::指針變變量名名=&對象象.成成員名名;注意::所指向向的數數據成成員必必須為為public。293.5對對象象指針針3.5.2指指向向對象象成員員的指指針(一))指向向對象象數據據成員員的指指針定義格格式::類型*指指針針變量量名訪問格格式::指針變變量名名=&對象象.成成員名名;例如::Timet1(10,30,30);int*p;p=&t1.h;//若若h為為public成員員303.5對對象象指針針3.5.2指指向向對象象成員員的指指針(二))指向向對象象成員員函數數的指指針1、指指向普普通函函數的的指針針函數在在編譯譯時被被分配配到一一個入入口地地址,,稱為為函數數的指指針。。函數名名代表表該函函數的的入口口地址址。313.5對對象象指針針3.5.2指指向向對象象成員員的指指針(二))指向向對象象成員員函數數的指指針1、指指向普普通函函數的的指針針定義形形式::返回類類型(*指指針變變量名名)(形參參列表表)賦值形形式::指針變變量名名=函函數名名323.5對對象象指針針3.5.2指指向向對象象成員員的指指針(二))指向向對象象成員員函數數的指指針1、指指向普普通函函數的的指針針函數調調用形形式::函數名名(實實參))(*指指針變變量名名)(實參參列表表)舉例::sum函函數333.5對對象象指針針3.5.2指向向對象成員員的指針(二)指向向對象成員員函數的指指針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對對象指針針3.5.2指向向對象成員員的指針(二)指向向對象成員員函數的指指針2、指向對對象成員函函數的指針針定義形式::返回類型((類名::*指針變變量名)((形參列表表)賦值形式::指針變量名名=&類名名::成員函數名名注意:所指指向的成員員函數必須須為public。。363.5對對象指針針3.5.2指向向對象成員員的指針(二)指向向對象成員員函數的指指針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共共用數據的保保護3.6.1常常對象3.6.2常常對象成成員3.6.3指指向對象象的常指針3.6.4指指向常對對象的指針變變量3.6.5對對象的常常引用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對對象的賦值和和復制3.8.1對對象的賦賦值格式對象名1=對對象名2例如:Timet1(10,30,0),t2;t2=t1;作用將對象2的數據成員的值依次賦值值給對象1;;注意對象1和對象象2必須是同同類的已定義對象。483.8對對象的賦值和和復制3.8.2對對象的復復制作用——利用已有對象象復制出新的的對象。格式:類名新對象(已有對對象);或類名新對象=已有對對象;建立新對象時時自動調用復制構造造函數。49本章內容3.8對對象的賦賦值和復制3.9靜靜態成員員3.10友友元3.11函函數模板與與類模板503.9靜靜態成員問題引入在類的定義中中,如何描述述類的所有對對象所共享的的數據?例如對于之前定義義的表示時間間信息的類Time,如如何統計Time類的對對象的個數??513.9靜靜態成員解決方法方法一:定義全局變量量或對象缺點:不安全全,任何功能能模塊都可以以更改;方法二:定義靜態的數數據成員優點:可實現現共享,并保保證安全性。。靜態成員靜態數據成員員靜態成員函數數523.9靜靜態成員3.9.1靜靜態數據成成員與普通數據成成員的區別普通數據成員員是屬于對對象的,即即在類類的每每一個個對象象中都都擁有有一個個拷貝貝。靜態態數數據據成成員員是是屬于于整整個個類類的,,即即每每個個類類只只有有一一個個拷拷貝貝,,該該類類所所有有對對象象都都共共同同擁擁有有和和使使用用。。53voidfun(){staticinti=0;i++;cout<<i<<endl;}voidmain(){for(intk=0;k<3;k++)fun();fun();}//只只被被賦賦值值一一次次,,程程序序退退出出時時消消失失543.9靜靜態態成成員員3.9.1靜靜態態數數據據成成員員定義義方方式式(一一))在類類內內聲聲明明靜靜態態數數據據成成員員static類型型名名成成員員名名;;例如如::classTime{…………staticintcount;};553.9靜靜態態成成員員3.9.1靜靜態態數數據據成成員員定義義方方式式(一一))在類類內內聲聲明明靜靜態態數數據據成成員員static類類型型名名成成員員名名;;注意意::1、、靜靜態態數數據據成成員員同同樣樣具具有有訪訪問問控控制制權權限限。。2、、靜靜態態數數據據成成員員具具有有靜靜態態生生存存期期,,即即在在程程序序開開始始時時,,系系統統為為其其分分配配存存儲儲空空間間,,當當程程序序結結束束時時撤撤銷銷。。和對象的的生死無無關563.9靜靜態態成員3.9.1靜靜態數據據成員定義方式式(二)在類外進進行初始始化類型類名::靜靜態數數據成員員名==初初始值值注意:1、必須初始化,,且必須在類外進進行初始始化。P1032、初始始化時不加static。。3、靜態態成員名名前必須說明類屬屬。573.9靜靜態態成員3.9.1靜靜態數據據成員訪問方式式方法一類名::靜靜態數據據成員名名方法二對象名.靜態態數據成員員名注意:靜態數據成成員同樣具具有訪問控制限限制,因此,必必須聲明為為public的,,才能在類類外訪問。583.9靜靜態成員員3.9.1靜態數數據成員應用舉例定義靜態數數據成員count統計Time類當當前對象的的個數。59練習定義一個學學生類,包包括學號、、姓名、語語文成績。。要求:統計N個學學生的平均均成績,并并能輸出學學生總數以以及平均成成績60練習分析程序執執行結果見Static.txt613.9靜靜態成員員3.9.2靜態成成員函數特點只能存取類的靜靜態數據成成員定義格式在成員函數數聲明的前前面加上關關鍵字static調用形式類名::靜態態成員函數數名((實參列表表)對象.靜靜態成員員函數名((實參參列表)623.9靜靜態成員員3.9.2靜態成成員函數注意在靜態成員員函數中不能直接訪問非非靜態成員員,若要訪訪問非靜態態成員,必須通過參數傳傳遞的方式式得到相應應的對象,,再通過對對象來訪問問。例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友友元3.10.1友友元函數(一)將普普通函數聲聲明為友元元函數普通函數作作友元的聲聲明格式friend類類型友友元函數數名(參數數列表)注意1、該函數數一般只在類中聲明明為友元,函函數的定義在類外外。2、友元的的聲明可在在類中任何位置。673.10友友元3.10.1友友元函函數(二))將成成員函函數聲聲明為為友元元函數數應用舉舉例定義表表示學學生類類Student;;定義教教師類類Teacher;;在Teacher類類中提提供一一個用用于修修改學學生成成績的的成員員函數數。683.10友友元元3.10.1友友元元函函數數(二二))將將成成員員函函數數聲聲明明為為友友元元函函數數成員員函函數數作作友友元元的的聲聲明明格格式式friend類類型型類名名::友友元元函函數數名名((參參數數))提前前引引用用聲聲明明class類類名名;;69Classteacher{Voidsets(…………){}}Voidteacher::sets(..){cin>>st.score;}Classstudent{Private:intnum;floatscore;Public:student(intn,floats){num=n;score=s;}FriendVoidteacher::sets(……);}Student[&]st703.10.1友友元函函數(二))將成成員函函數聲聲明為為友元元函數數注意::1、兩兩個類類聲明明的先先后順順序。。包含friend關鍵字字的那那個類類后聲明2、友友元函函數應應先在在類中中聲明明,其其定義義應放放在兩兩個類類的聲聲明后后面。。713.10友友元3.10.2友友元類類作用類B是是類A的友友元類類,則則B中中所有有的成成員函函數都都是A的友友元函函數,,即所所有B的成成員函函數都都能訪訪問A的私私有數數據成成員。。友元類類的聲聲明格格式friend類類名;;例如此時那那個類類在前前都可可以,,注意意提前前引用用聲明明即可可。723.10友友元3.10.2友友元類類說明((P111)友元關關系是是單向的,而而不是是雙向向的。。友元關關系不具有有傳遞遞性。73本章內內容3.8對對象象的賦賦值和和復制制3.9靜靜態態成員員3.10友友元3.11模模板743.11.1模模板的的概念念(一))什么么是模模板??一種通通用的的函數數和類類的設設計方方法,,即將將函數數或類類處理理的數據類類型進進行參參數化化,在使使用時時再對對數據據類型型進行行實例例化。。(二))作用用實現代代碼重用,提高高程序序開發發效率率。(三))模板板的分分類函數模模板類模板板753.11.2函函數模模板(一))函數數模板板的聲聲明template<classT1,,classT2……><返返回回類型型><函函數數名>((參數數表)){//函函數體體定義義}注意::T1,T2是是參數數化類類型,,class也也可寫寫為typename。763.11.3類類模板板(一))問題題引入入舉例1、定定義對對兩個個整數數進行行比較較的類類Compare_int。。2、定義對對兩個實數數進行比較較的類Compare_double。773.11.3類類模板(一)問題題引入classCompare_int{intx,y;public:Compare(inta,intb){ x=a;y=b;}intmax(){returnx>y?x:y;}intmin(){returnx<y?x:y;}};783.11.3類類模板(一)問題題引入classCompare_double{doublex,y;public:Compare(doublea,doubleb){ x=a;y=b;}doublemax(){returnx>y?x:y;}doublemin(){returnx<y?x:y;}};793.11.3類類模板(一)問題題引入template<classT>classCompare{Tx,y;public:Compare(Ta,Tb){ x=a;y=b;}Tmax(){returnx>y?x:y;}Tmin(){returnx<y?x:y;}};803.11.3類類模板(二)類模模板的定義義1、定義格格式template<classT1,classT2,……>class類模板板名{//類成員員定義;};其中:class也可寫為為typename;813
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關于黃岡的七下數學試卷
- 貨品分析培訓課件圖片
- 肥城中考數學試卷
- 肛腸五項技術課件
- 燈塔市期末考試數學試卷
- 浮山中學數學試卷
- 高級中學期末數學試卷
- 2025年06月浙江溫州市蒼南縣衛生健康系統面向社會招聘120編外輔助人員2人筆試歷年專業考點(難、易錯點)附帶答案詳解
- 2025年01月2025安徽池州市人民醫院勞務派遣辦公室文員招聘1人筆試歷年專業考點(難、易錯點)附帶答案詳解
- 銷售技能培訓課件分類
- 年產 35 萬噸金屬結構件項目(一期年產 6 萬噸金屬結構件)環評報告書
- 地產 設計培訓課件
- 中國古建筑行業市場發展現狀及投資前景展望報告
- 浙江杭州市2024-2025學年高一下學期6月期末考試物理試題及答案
- 員工勸退方案文案(3篇)
- 閔行區2024-2025學年下學期期末考試六年級數學試卷及答案(上海新教材滬教版)
- 借款合同模版
- 2025年高考全國一卷數學真題-答案
- 義務教育英語課程標準(2022年版)
- 企業異地作業管理制度
- 蛇咬傷的急救處理措施
評論
0/150
提交評論