類與對象(c++).ppt_第1頁
類與對象(c++).ppt_第2頁
類與對象(c++).ppt_第3頁
類與對象(c++).ppt_第4頁
類與對象(c++).ppt_第5頁
已閱讀5頁,還剩39頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第7章類與對象 7 1類 對象及數據封裝7 2構造函數 析構函數 成員函數 靜態成員與友元 教學目標 1掌握類及對象的概念 類與對象的關系 類與對象的差異2掌握構造函數 析構函數的作用及定義3了解靜態成員 友元等概念 教學重點 1 類和對象概念和定義 2 構造函數和析構函數解析 教學難點 構造函數 析構函數 第7章類與對象 7 1類的定義 7 1 1類的定義7 1 2類成員的訪問控制7 1 3類的成員函數7 1 4對象 7 1 1類的定義 類的引入 類是一種由用戶定義的復雜數據類型 它是將不同類型的數據及相關的操作封裝在一起的集合體 描述客觀事物時 必須用不同的數據類型來描述事物各個不同的方面 如一種商品 商品名稱 用字符串描述 該商品數量 用整型數描述 該商品單價 用浮點數描述 該商品總價 用浮點數描述 這里用了屬于三種不同數據類型的四個數據成員來描述一種商品 7 1 1類的定義 類的定義的一般格式 說明部分class public protected private 實現部分 7 1 1類的定義 類的表述 classGoods private charname 21 intamount floatprice floattValue public setPrice intp 最后的分號不可少 這是一條說明語句關鍵字class是數據類型說明符 指出下面說明的是類 標識符Goods是商品這個類的類型名 花括號中是構成類體的系列成員 關鍵字public是一種訪問限定符 7 1 1類的定義 類定義語法格式 class類名 private 成員表1 public 成員表2 protected 成員表3 注意 所有說明都以分號結束其中 class類名 稱為類頭 花括號中的部分稱為類體 類體中定義了類成員表 包含數據和函數 7 1 1類的定義 成員函數 classGoods private charname 21 intamount floatprice floattValue public voidregisterGoods char int float 輸入數據voidcountTotal void 計算商品總價值voidgetName char 讀取商品名intgetAmount void 讀取商品數量floatgetPrice void 讀取商品單價floatgetTvalue void 讀取商品總價值 7 1 1類的定義 封裝 類把數據 事物的屬性 和函數 事物的行為 操作 封裝為一個整體 接口 通常數據成員被說明成私有的 函數成員被說明成公有的 從外部對數據成員進行操作 只能通過公有函數來完成 從而使數據受到了良好的保護 不易受副作用的影響 公有函數集定義了類的接口 成員函數可以直接訪問類定義中的任一成員 可以處理數據成員 也可調用成員函數 注意 類是一種數據類型 定義時系統不為類分配存儲空間 所以不能對類的數據成員初始化 類中的任何數據成員也不能使用關鍵字extern auto或register限定其存儲類型 7 1 2類成員的訪問控制 訪問限定符 public 公共的 說明的成員能從外部進行訪問 private 私有的 和protected 保護的 說明的成員不能從外部進行訪問 每種說明符可在類體中使用多次 訪問限定符的作用域是從該說明符出現開始到下一個說明符之前或類體結束之前結束 如果在類體起始點無訪問說明符 系統默認定義為私有 private 訪問限定符private protected體現了類具有封裝性 7 1 3類的成員函數 成員函數定義 成員涵數用來描述事物的行為 成員涵數的說明必須在類體中進行 但定義既可以在類體中進行 也可以在類體外進行 1 通常在類定義中 成員函數僅作聲明 函數定義通常在類的說明之后進行 其格式如下 返回值類型類名 函數名 參數表 函數體其中運算符 稱為作用域運算符 它指出該函數是屬于哪一個類的成員函數 2 另一種方式是對成員涵數進行說明后 緊接著進行成員涵數的定義 classGoods private charname 21 intamount floatprice floattValue public floatgetPrice floatgetTvalue voidsetPrice intp price p floatGoods getPrice return Price floatGoods getTvalue return tValue 7 1 3類的成員函數 7 1 4對象的定義 定義對象 對象是類的實例 instance 定義一種數據類型只是告訴編譯系統該數據類型的構造 并沒有分配內存 類只是一個樣板 以此樣板可以在內存中開辟出同樣結構的實例 對象 一個對象必須屬于一個已知的類 7 1 4對象的定義 定義對象的格式如下 其中 類名 為對象所屬的類的名稱 對象名 合法的C 標識符 可以一次定義多個對象 參數表 為初始化對象時所需要的參數 例如 Goodscar 這個定義創建了Goods類的一個對象car 同時為它分配了屬于它自己的存儲空間 用來存放數據和對這些數據實施操作的成員函數 代碼 對象存儲 圖7 1各對象完全獨立地安排內存的方案 圖7 1是系統為每一個對象分配了全套的內存 數據區安放數據成員 代碼區安放成員函數 注意 區別同一個類的各個不同的對象的屬性是由數據成員決定的 不同對象的數據成員的內容是不一樣的 而行為 操作 是用函數來描述的 這些操作的代碼對所有對象都是一樣的 7 1 4對象的定義 圖7 2各對象的代碼區共用的方案 圖7 2僅為每個對象分配一個數據區 代碼區 存放成員函數的區域 為各對象類共用 圖7 1對應的是在類說明中定義函數 而圖7 2對應的是在類說明外部定義函數 7 1 4對象的定義 7 1 4對象的定義 對象的成員就是用來創建該對象的類所定義的成員 包括數據成員和成員涵數創建對象之后 就可以使用 和 來訪問對象的數據成員和成員涵數 一般格式如下 數據成員名 成員涵數名 參數表 或者 成員涵數名 參數表 對象使用規則 只要在對象名后加點號 點操作符 再加數據成員或成員函數名就可以了 但是這些成員必須是公有的成員 只有公有成員才能在對象的外面對它進行訪問 例7 1 中對象car的4個數據成員全是私有的 如寫 car name car amount car price car tValue 是錯誤的 必須用對象car所帶的公有函數進行訪問 7 1 4對象的定義 7 2構造函數和析構函數 7 2 1構造函數7 2 2析構函數7 2 3拷貝構造函數7 2 4靜態成員7 2 5友元函數 7 2 1構造函數 數據成員多為私有的 要對它們進行初始化 必須用一個公有函數來進行 同時這個函數應該在且僅在定義對象時自動執行一次 這個函數被稱為 構造函數 constructor 構造涵數的作用是 在對象被創建時用特定的值構造對象 將對象初始化為一種特定的狀態 使該對象具有不同于其他對象的特征 構造涵數由系統自動調用 7 2 1構造函數 構造函數特征 1 函數名與類名相同 2 構造函數無函數返回類型說明 注意是什么也不寫 也不可寫void 3 在程序運行時 當新的對象被建立時 該對象所屬的類的構造函數自動被調用 在該對象生存期中也只調用這一次 4 構造函數可以重載 嚴格地講 說明中可以有多個構造函數 它們由不同的參數表區分 系統在自動調用時按一般函數重載的規則選一個執行 7 2 1構造函數 5 構造函數可以在類中定義 也可以在類外定義 6 如果類說明中沒有給出構造函數 則C 編譯器自動給出一個默認的構造函數 類名 void 但只要我們定義了一個構造函數 系統就不會自動生成默認的構造函數 只要構造函數是無參的或各參數均是有默認值的 C 編譯器都認為是默認的構造函數 并且默認的構造函數只能有一個 7 2 1構造函數 Goods的構造函數 三參數 Goods char n inta floatp strcpy name n amount a price p tValue price amount 兩參數 貨名和單價 Goods char n floatp strcpy name n price p amount 0 tValue 0 0 默認的構造函數 Goods name 0 0 price 0 0 amount 0 tValue 0 0 這三個構造函數同時被說明 重載 7 2 1構造函數 構造函數應用 Goodscar1 夏利2000 30 98000 0 調用了Goods中的第一個構造函數 等效于 Goodscar1 Goods 夏利2000 30 98000 0 Goodscar2 桑塔那2000 164000 0 調用的是第二個構造函數 參數為兩個 Goodscar3 定義時調用不帶參數的構造函數但是定義對象時不能加括號 例如 Goodscar4 car4 是不帶參數的函數 它的返回值是類Goods的對象 7 2 2析構函數 析構函數 destructor 特征 當一個對象的生命周期結束時 C 會自動調用析構函數 destructor 對該對象進行善后工作 1 構函數名與類名相同 但在前面加上字符 如 Goods 2 析構函數無函數返回類型 與構造函數在這方面是一樣的 但析構函數不帶任何參數 3 一個類有一個也只有一個析構函數 這與構造函數不同 析構函數可以默認 4 對象注銷時 系統自動調用析構函數 7 2 3拷貝構造函數 拷貝構造函數的引入 同一個類的對象在內存中有完全相同的結構 如果作為一個整體進行復制是完全可行的 這個復制過程只需要復制數據成員 而成員函數是共用的 只有一份代碼 在建立對象時可用同一類的另一個對象來初始化該對象 這時所用的構造函數稱為拷貝構造函數 CopyConstructor 故 拷貝構造涵數是用一個已知的對象來初始化一個正在創建的同類對象 7 2 3拷貝構造函數 拷貝構造函數的一般格式 const 涵數體 特征 是一種構造涵數 與類名同名 不指定返回值類型 只有一個參數 且該參數是同類對象的引用 每一個類都必須有一個拷貝構造涵數 若類中沒有定義拷貝構造涵數 則系統自動生成一個公有的拷貝構造涵數 7 2 3拷貝構造函數 例如 Goods constGoods 7 2 3拷貝構造函數 實拷貝構造涵數的調用實例 Goodscar1 夏利2000 30 98000 00 調用三個參數的構造函數Goodscar2 car1 調用拷貝構造函數Goodscar3 car1 調用拷貝構造函數 car1為實參這樣三個對象的初始化結果完全一樣 注意 在類定義中如果沒有顯式給出構造函數時 并不是不用構造函數 而是由系統自動調用默認的構造函數或默認的拷貝構造函數 如果有程序設計者定義的構造函數 包括拷貝構造函數 則按函數重載的規律 調用合適的構造函數 7 2 4靜態數據成員 靜態數據成員定義與使用 在類定義中 用關鍵字static修飾的數據成員為靜態數據成員 該類所有對象共享由系統為靜態成員分配的一個存儲空間 而這個存儲空間是在編譯時分配的 在定義對象時不再為靜態成員分配空間 靜態數據是該類所有對象所共有的 可提供同一類的所有對象之間信息交換的捷徑 7 2 4靜態數據成員 靜態數據成員定義與使用 靜態數據成員屬于整個類 使用時可用以下格式 類名 靜態數據成員名 在類的外部使用時注意 1 靜態數據成員在類中聲明 但不能在其中定義 2 靜態數據成員的初始化不能在構造函數中進行 7 2 4靜態數據成員 例7 3 用靜態數據成員計算由同一類建立的對象的數量執行程序后輸出 對象數量 1 a 0 構造函數產生對象數量 2 a 1 構造函數產生對象數量 3 a 2 構造函數產生對象數量 2 a 2 析構函數產生對象數量 1 a 1 析構函數產生對象數量 0 a 0 析構函數產生 7 2 4靜態成員函數 靜態成員函數的引入 當一個函數不需要訪問類中除靜態數據成員之外的數據時 我們可以將其定義為靜態成員函數 一般情況下 靜態成員函數只能訪問類中的靜態數據成員 靜態成員函數是被一個類中所有對象共享的成員函數 不屬于哪個特定的對象 7 2 4靜態成員函數 靜態成員函數的使用 將成員函數說明為靜態 使該成員函數與該類的不同對象無關 靜態成員函數的調用 在對象之外可以采用下面的方式 類名 函數名 對象名 參數表 或者任一類對象名 函數名 對象名 參數表 靜態函數成員多為公有的 7 2 4靜態成員函數 靜態成員函數的使用實例 在下面的程序中 將使用類Car為自己的每一個對象提供了對象ID號 創建或銷毀對象時 將有一靜態數據成員記錄程序中的對象數 執行結果是顯示對象ID及對象數 7 2 4靜態成員函數 靜態成員函數的使用實例 includeclassCar private staticintcounter 靜態數據成員intid public Car 構造函數 Car 析構函數staticvoiddisplay 靜態成員函數voiddisplayID 7 2 4靜態成員函數 靜態成員函數的使用實例 intCar counter 0 定義靜態數據成員Car Car counter id counter Car Car counter cout Objectnumber id beingdestroyed voidCar display staticfunction cout Numberofobjectscreatedis counter endl voidCar displayID cout ObjectIDis id endl 7 2 4靜態成員函數 靜態成員函數的使用實例 intmain Cara1 Car display Cara2 a3 Car display a1 displayID a2 displayID a3 displayID return0 在C 中 友元 friend 函數允許在類外訪問該類中的任何成員 就象成員函數一樣 友元函數用關鍵字friend說明 由于類的封裝性 只有類的成員涵數才能訪問類的私有成員 而外部涵數只能訪問類的公有成員 但有時需要在類的外部訪問類的私有成員 以減少使用類的成員涵數訪問私有成員而帶來的參數傳遞 類型檢查 安全性檢查的時間開銷 7 2 5友元函數 7 2 5友

溫馨提示

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

評論

0/150

提交評論