版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第2章 類與對(duì)象,一個(gè)類是對(duì)一種概念的描述,或者說是對(duì)某一類具體事物的抽象。,2.1 類的含義與表述,2.2 類定義的語法規(guī)則,類定義包含類頭和類體兩部分,形式如下:,class 類名/類頭 訪問限定符: 數(shù)據(jù)成員聲明 /類體 訪問限定符: 函數(shù)成員聲明或定義 ;/注意分號(hào)是必需的,類有三種訪問控制: private 訪問控制符 protected public,class stack private: char data100; char *top; public: void push(char c) / char pop() / ;,可以省略掉,使用說明: 類的三個(gè)訪問控制符可以任意順序出
2、現(xiàn)任意次。 不能在類聲明中給數(shù)據(jù)成員賦初值。 protected用于繼承 類的作用域 類的作用域指在類的聲明中的一對(duì)花括號(hào)所形成的作用域。 在類的作用域內(nèi)部或外部訪問同一個(gè)名字(變量或函數(shù))的效果是不同的。,2.3 類對(duì)象定義,一個(gè)自定義的類類型與內(nèi)置類型在語法上并沒有什么差異。例如 : Date d1, d2, *pd 對(duì)象和指針之間的運(yùn)算與簡單變量相同,對(duì)象間可以直接賦值: pd = 當(dāng)一個(gè)對(duì)象賦值給另一個(gè)對(duì)象時(shí),所有的數(shù)據(jù)成員都會(huì)逐位復(fù)制。,2.4 成員訪問,1. 在類的內(nèi)部 在類的內(nèi)部(主要是類的方法中)訪問類的成員時(shí)只要直接使用成員名即可,無論屬性還是方法都如此。 2. 在類的外部
3、一般形式: 對(duì)象名.數(shù)據(jù)成員名 對(duì)象名.成員函數(shù)名(實(shí)參表) 若定義的是指向?qū)ο蟮闹羔?,則訪問此對(duì)象的成員時(shí),要使用“”操作符。,2.5 構(gòu)造函數(shù)與對(duì)象初始化,解決對(duì)象初始化問題的方法是為類定義一種特殊的方法:構(gòu)造函數(shù),語法形式為: 類名(參數(shù)列表)/初始化語句,1. 構(gòu)造函數(shù)的特殊性 語法上,構(gòu)造函數(shù)名與類名必須相同,且不能有返回類型(也意味著無返回值),除此之外與普通方法相同,如可以有參數(shù)列表、可以重載和設(shè)置參數(shù)的缺省值等。 構(gòu)造函數(shù)在生成對(duì)象時(shí)由系統(tǒng)自動(dòng)調(diào)用。 構(gòu)造函數(shù)必須是公有的,否則系統(tǒng)也無法在構(gòu)造對(duì)象時(shí)調(diào)用它。,2. 缺省的構(gòu)造函數(shù) 在C+中,每個(gè)類必須有構(gòu)造函數(shù),否則不能生成類對(duì)
4、象。 如果用戶沒有定義,則系統(tǒng)自動(dòng)生成一個(gè)構(gòu)造函數(shù),稱為缺省構(gòu)造函數(shù)。 缺省構(gòu)造函數(shù)沒有任何參數(shù),形式為:類名( ); 需要特別注意的是,只要用戶自己定義了一個(gè)構(gòu)造函數(shù),無論有無參數(shù),系統(tǒng)將不再提供缺省構(gòu)造函數(shù)。,3. 構(gòu)造函數(shù)的重載與對(duì)象定義 創(chuàng)建一個(gè)對(duì)象意味著一次構(gòu)造函數(shù)調(diào)用,因此,對(duì)象后面的實(shí)參數(shù)列表必須與某一個(gè)構(gòu)造函數(shù)的形參列表相對(duì)應(yīng),使得系統(tǒng)能找到對(duì)應(yīng)的構(gòu)造函數(shù)并調(diào)用它,否則將產(chǎn)生找不到適當(dāng)匹配的錯(cuò)誤。 特殊情況說明: 構(gòu)造函數(shù)只有一個(gè)參數(shù),則下面兩個(gè)對(duì)象定義語句的作用相同 Student s2(Tom); Student s2 = “Tom”;/初始化而非賦值 無參構(gòu)造函數(shù)定義對(duì)象
5、時(shí)不能帶有括號(hào) Student s1();,2.6 拷貝構(gòu)造函數(shù),構(gòu)造函數(shù)的參數(shù)可以是任何類型參數(shù),甚至可以將自己類對(duì)象的引用作為參數(shù),稱它為拷貝構(gòu)造函數(shù)。 拷貝構(gòu)造函數(shù)有兩個(gè)含義: 首先,它是一個(gè)構(gòu)造函數(shù),當(dāng)創(chuàng)建一個(gè)新對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用它; 其次,它將一個(gè)已經(jīng)定義過 的對(duì)象的數(shù)據(jù)成員逐一對(duì)應(yīng)地復(fù)制給新對(duì)象。 如果一個(gè)類沒有定義拷貝構(gòu)造函數(shù),C+可以為該類產(chǎn)生一個(gè)缺省的拷貝構(gòu)造函數(shù)。,拷貝構(gòu)造函數(shù)的作用: 1 創(chuàng)建一個(gè)新對(duì)象,并將一個(gè)已存在的對(duì)象復(fù)制到這個(gè)新對(duì)象。 2 對(duì)象本身做參數(shù)。 3 函數(shù)返回一個(gè)對(duì)象。,一般來說,如果一個(gè)對(duì)象需要獨(dú)占資源時(shí)必須定義拷貝構(gòu)造函數(shù),這里的資源指動(dòng)態(tài)內(nèi)存、窗
6、口句柄和文件句柄等。 利用用戶自定義拷貝構(gòu)造函數(shù)實(shí)現(xiàn)的拷貝構(gòu)造稱為“深拷貝”,而采用系統(tǒng)缺省的拷貝構(gòu)造函數(shù)實(shí)現(xiàn)的拷貝稱為“淺拷貝”。,2.7 析構(gòu)函數(shù)與對(duì)象拆除,在一個(gè)對(duì)象生命期結(jié)束時(shí)就會(huì)被拆除。例如,一個(gè)局部定義的對(duì)象在程序流程離開此局部區(qū)域時(shí)被拆除,而一個(gè)動(dòng)態(tài)建立的對(duì)象在用delete釋放時(shí)被拆除。拆除對(duì)象時(shí)系統(tǒng)要自動(dòng)調(diào)用一個(gè)類的特殊方法析構(gòu)函數(shù)。 如果一個(gè)類沒定義析構(gòu)函數(shù),系統(tǒng)會(huì)自動(dòng)生成一個(gè),它的主要工作是將為對(duì)象分配的內(nèi)存資源歸還給系統(tǒng)。如果在拆除類的對(duì)象時(shí)需要加入一些特殊的行為則需要自己定義析構(gòu)函數(shù)。,class A . public: A(.);/構(gòu)造函數(shù)聲明 A( );/析構(gòu)函數(shù)
7、聲明 . ; 1、析構(gòu)函數(shù)不能有返回類型,也沒有任何參數(shù)(因?yàn)闊o法指定實(shí)參數(shù)),自然也就不能重載。 2、對(duì)于一個(gè)簡單的類,系統(tǒng)提供的缺省析構(gòu)函數(shù)可以很好地工作,但如果在一個(gè)對(duì)象工作期間占用了系統(tǒng)資源,則必須定義析構(gòu)函數(shù)釋放這種資源,,一般地講,如果一個(gè)類需要定義拷貝構(gòu)造函數(shù),也就需要定義一個(gè)析構(gòu)函數(shù)。 此外,利用delete運(yùn)算符刪除對(duì)象時(shí)自動(dòng)調(diào)用析構(gòu)函數(shù)也是delete運(yùn)算符與free函數(shù)的主要區(qū)別。,2.8 靜態(tài)成員,一個(gè)類的屬性或方法可以采用static進(jìn)行修飾,這樣的成員稱為靜態(tài)成員。 1. 靜態(tài)屬性是只在對(duì)象之間公用的“全局變量” 函數(shù)共用一份信息,采用全局變量來實(shí)現(xiàn)。 類的對(duì)象共用
8、一份信息,采取的方法是將其定義為類的靜態(tài)屬性。 2. 靜態(tài)屬性的定義與初始化 static int no; /類型任意 與普通屬性不同的是,靜態(tài)屬性必須在類定義之外進(jìn)行定義性聲明,包括初始化,如: int PointX:no = 0;/仍使用“類名:”作為限定 3 靜態(tài)屬性的表示方法 類名:靜態(tài)成員名 如PointX:no,聲明不會(huì)將no的私有屬性變成公開 靜態(tài)屬性聲明也是對(duì)該屬性初始化的唯一場(chǎng)所和時(shí)機(jī),在沒有提供初始值時(shí),系統(tǒng)將其清0。 類定義外的靜態(tài)屬性聲明不能再加static關(guān)鍵字。 在.h和.cpp文件中,靜態(tài)屬性的定義性聲明語句應(yīng)置于.cpp文件中,所有的類方法實(shí)現(xiàn)之外。 靜態(tài)屬性是
9、屬于類而不是對(duì)象的。 靜態(tài)屬性在程序運(yùn)行開始時(shí)初始化,靜態(tài)方法,靜態(tài)方法中不能出現(xiàn)任何非靜態(tài)成員 靜態(tài)方法沒有缺省的this指針,2.9 友員,類是經(jīng)過封裝的“黑盒”,普通函數(shù)不能訪問類的私有成員。 不妨將一個(gè)對(duì)象看成是一本私人的日記,通常是不允許外人去翻看的,但朋友就可能享有一定的特權(quán),看到日記的內(nèi)容。如果希望一個(gè)普通函數(shù)能夠直接訪問類的成員,也可以將其定義為類的“朋友”。因?yàn)檫@個(gè)普通函數(shù)并不是類的成員,故稱為類的友員。,1. 使用普通函數(shù)作為類的友員 如果要將某個(gè)普通函數(shù)作為類的友員,必須在類定義中進(jìn)行聲明,形式為: class X . public: friend type 友員函數(shù)名(
10、形式參數(shù)表); ;,2. 類方法作為友員和友類 一個(gè)類的方法可以定義為另一個(gè)類的友員。 例如,要將類B的方法int fn(int, A /在A的定義中聲明B是A的友類 這相當(dāng)于將類B的所有方法都定義成類A的友員。,2.10 成員初始化列表與特殊成員的初始化,1. 對(duì)象成員的缺省構(gòu)造 如果一個(gè)類含有其它類的對(duì)象為成員,在生成類對(duì)象時(shí),系統(tǒng)會(huì)調(diào)用成員對(duì)象類的無參構(gòu)造函數(shù)來構(gòu)造成員對(duì)象。,class Group Student s1, s2, s3; . ; Group g1;,生成對(duì)象g1時(shí),系統(tǒng)會(huì)為每個(gè)Student類的對(duì)象調(diào)用一次構(gòu)造函數(shù),但由于沒有指定實(shí)際參數(shù),也只能調(diào)用Student類的無參構(gòu)造函數(shù)。,2. 構(gòu)造函數(shù)的成員初始化列表 構(gòu)造函數(shù)的簡單參數(shù)可以被直接列在函數(shù)聲明之后,函數(shù)體之前,稱為構(gòu)造函數(shù)的成員初始化列表,形式為: 類名(行參說明表):成員初始化列表;,Date(int y=2007, int m=1, int d=30):year(y), month(m), day(d) ,3. 特殊成員采用成員初始化列表進(jìn)行初始化 一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 手工藝術(shù)師考試題及答案
- 社團(tuán)工作考試題及答案
- 社會(huì)體育章節(jié)試題及答案
- 輕化工計(jì)算機(jī)考試題目及答案
- 脊柱調(diào)理小知識(shí)分享課件
- 輔警交管業(yè)務(wù)培訓(xùn)課件
- 輔助執(zhí)法人員培訓(xùn)課件
- 床旁CRRT在妊娠期高血壓疾病中的應(yīng)用
- 2026年深圳中考語文模塊通關(guān)檢測(cè)試卷(附答案可下載)
- 2026年大學(xué)大二(口腔醫(yī)學(xué)技術(shù))口腔頜面外科技術(shù)階段測(cè)試題及答案
- 蘇州高新區(qū)(虎丘區(qū))市場(chǎng)監(jiān)督管理局公益性崗位招聘1人考試參考題庫及答案解析
- 《直腸癌NCCN治療指南》課件
- 江西省九江市2024-2025學(xué)年九年級(jí)上期末考試英語試題
- 二人合伙土地種植合同
- 湖南省張家界市永定區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 環(huán)境監(jiān)測(cè)崗位職業(yè)技能考試題庫含答案
- 路燈基礎(chǔ)現(xiàn)澆混凝土檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- 化學(xué)品作業(yè)場(chǎng)所安全警示標(biāo)志大全
- 礦卡司機(jī)安全教育考試卷(帶答案)
- 中建淺圓倉漏斗模板支撐架安全專項(xiàng)施工方案
- 新能源材料與器件PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論