版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)05數(shù)據(jù)的共享與保護(hù)(2學(xué)時)(第5章數(shù)據(jù)的共享與保護(hù))、實(shí)驗(yàn)?zāi)康?1)觀察程序運(yùn)行中變量的作用域、生存期和可見性。(2)學(xué)習(xí)類的靜態(tài)成員的使用。(3)學(xué)習(xí)多文件結(jié)構(gòu)在C+程序中的使用。二、實(shí)驗(yàn)任務(wù)5_1運(yùn)行下面的程序,觀察變量x、y的值。.endl;coutx= xendl;couty= yendl;cout在 main()中求 x 和 y 的值.endl;int x=10,y=20;coutx= xendl;couty= yendl;cout進(jìn)入函數(shù) fn1(). endl;fn1();cout返回 main() endl;coutx= xendl;couty= yendl;retur
2、n 0;void fn1()int y=200;coutx= xendl;couty= yn京客請程序及運(yùn)行結(jié)果:(1)類聲明頭文件 showServerName();showClientNum();client b; showServerName();b. showClientNum();c: C: T I NI)0S sryst37 n d). azpfl u D 1 D 2 1 Is一二 % 4- f 1 I 名數(shù)名數(shù)名數(shù)名數(shù)意 弟總弟任器寶葬:0LI-任 務(wù)戶多戶多戶多按 也殖r殖祜客行.1.1函數(shù)原型作用域在函數(shù)原型聲明時形式參數(shù)的作用范圍。例,double Area(double
3、radius);其中標(biāo)識符radius的作用(或稱有效)范圍在形參列表的左、右括號之間,稱標(biāo)識符radius的作用域是函數(shù)原型作用域。由于在函數(shù)原型的形參表中起作用的只是形參類型,標(biāo)識符并不起作用, 可省略。.局部作用域(塊作用域)例:void fun(int a)、int b=a;:cinb;if(b0)int c; 11的作用域ja的作用域.七的作用域)JJ形參作用域:從形參列表中的聲明處開始,到整個函數(shù)體結(jié)束處止 b和c都具有塊作用域,是不同的塊作用域。塊是一對大括號括起來的一段程序。此例,函數(shù)體是一個塊,if語句后的分支體又是一個較小的塊,二者是包含關(guān)系。在塊中聲明的標(biāo)識符,其作用域從
4、聲明處開始,一直到塊結(jié)束的大括號為 止。具有塊作用域的變量也稱為局部變量。.類作用域類是一組有名成員的集合,類 X的成員m具有類作用域,對m的訪問方式 如下:(1)若在X的成員函數(shù)中無同名的局部作用域標(biāo)識符,則在該函數(shù)內(nèi)可訪問成員m。(2)通過表達(dá)式或X:m。這正是程序中訪問對象成員的最基本方法。(3)通過prt-m這樣的表達(dá)式,其中prt為指向X類的一個對象的指針。.命名空間作用域命名空間大型程序通常由不同模塊構(gòu)成,不同模塊中的類和函數(shù)之間可能發(fā)生重名, 將引發(fā)錯誤。命名空間可以解決類名、函數(shù)等的命名沖突。命名空間語法形式:namespace命名空間名命名空間內(nèi)的各種聲明(函數(shù)聲明、類聲明、
5、)例namespace SomeNs classSomeClass .;特殊的命名空間_全局命名空間:默認(rèn)的命名空間_匿名命名空間:對每個源文件是唯一的命名空間作用域一個命名空間確定了一個命名空間作用域引用其它命名空間作用域中的標(biāo)識符_命名空間名二標(biāo)識符名_例:聲明一個SomeClass型的對象SomeNs:SomeClass obj1;將其它命名空間作用域的標(biāo)識符暴露于當(dāng)前作用域_對指定標(biāo)識符using命名空間名二標(biāo)識符名;_對所有標(biāo)識符using namespace命名空間名;例5-1中所聲明的全局變量就具有文件作用域,它們在整個文件中都有效。例5-1作用域?qū)嵗?include using
6、namespacestd;文件作用域美作用域塊作用威5.1.21 521522若需要統(tǒng)計(jì)雇員總數(shù),這個數(shù)據(jù)存放在什么地方呢若以類外的變量來存儲總數(shù),不能實(shí)現(xiàn)數(shù)據(jù)的隱藏。若在類中增加一個數(shù)據(jù)成員用以存放總數(shù),必然在每一個對象中都存儲一 個副本,不僅冗余,且每個對象分別維護(hù)一個“總數(shù)”,勢必造成數(shù)據(jù)的不一致 性。比較理想的方案是類的所有對象共同擁有一個用于存放總數(shù)的數(shù)據(jù)成員。5.3.1靜態(tài)數(shù)據(jù)成員 P154實(shí)例屬性“一個類的所有對象具有相同的屬性”,是指屬性的個數(shù)、名稱、數(shù)據(jù)類型 相同,各個對象的屬性值則可各不相同。以類的非靜態(tài)數(shù)據(jù)成員表示。類屬性是描述類的所有對象的共同特征的一個數(shù)據(jù)項(xiàng),對于任何
7、對象實(shí)例,它的 屬性值是相同的。通過靜態(tài)數(shù)據(jù)成員來實(shí)現(xiàn)“類屬性”。靜態(tài)數(shù)據(jù)成員的訪問靜態(tài)數(shù)據(jù)成員不屬于任何一個對象,只能通過類名對它訪問,用法是“ 類名二標(biāo)識符”。靜態(tài)數(shù)據(jù)成員的說明和定義在類的聲明中僅僅對靜態(tài)數(shù)據(jù)成員進(jìn)行 引用性說明,必須在文件作用域的 某處用類名限定進(jìn)行 定義性說明,這時也可進(jìn)行初始化。在UML中,靜態(tài)數(shù)據(jù)成員下方添加下劃線。例5-4具有靜態(tài)數(shù)據(jù)成員的Point類。引入靜態(tài)數(shù)據(jù)成員的Point類。圖5-2包含靜態(tài)數(shù)據(jù)成員的Point類的UML圖Pointx : inty : intcount : int=0+Point(xx :int=0, yy :int=0)+getX(
8、) :int+getY() :int+Point(p : Point&)+showCount() : void#include using namespacestd;classPoint(Point; a: 4,5 tcount=lPoint b: 4.5 前泉Press any Key to contirue_5.3.25.4.15.4.2.;聲明友元類,是建立類與類之間的聯(lián)系,實(shí)現(xiàn)類之間數(shù)據(jù)共享的一種途徑。在UML中,兩個類之間的友元關(guān)系是通過 構(gòu)造型依賴來表征圖5-5類A和類B友元關(guān)系的UML圖BA-x : int+set(i : int) : void +display() :void
9、+display() :void+getx() : inta#include using namespace std;class Apublic:void display() coutxendl; int getx() return x; friend class B;private: int x;class Bpublic:void set(int i);void display() coutendl; private:A a;void B:set(int i):ess any hey to continue5.5.15.5.2常成員函數(shù)聲明格式:類型說明符函數(shù)(參數(shù)表)const;汪忠:c
10、onst是函數(shù)類型的一個組成部分。常成員函數(shù)不能更新對象的數(shù)據(jù)成員,也不能調(diào)用該類中沒有用 const 修飾的成員函數(shù)。 常對象只能調(diào)用它的常成員函數(shù)。const可用于對重載函數(shù)的區(qū)分。例如,void print();void print() const;這是對print的有效重載。在UML中,常成員函數(shù)前添加。例5-7常成員函數(shù)舉例。圖5-6包含常成員函數(shù)的R類的UML圖R-ri : int-r2 : int+R(rr1 : int, rr2 : int)+print() : void+print() : void#include using namespace std;class Rpub
11、lic:R(int rr1,int rr2):r1(rr1),r2(rr2) void print();voidprint()const;常數(shù)據(jù)成員類的成員數(shù)據(jù)也可以是常量。使用const說明的數(shù)據(jù)成員為常數(shù)據(jù)成員。任何函數(shù)中都不能對常數(shù)據(jù)成員賦值。構(gòu)造函數(shù)對常數(shù)據(jù)成員進(jìn)行初始化,就只能通過初始化列表 在UML中,常數(shù)據(jù)成員前添加consto例5-8常數(shù)據(jù)成員舉例。圖5-7包含常數(shù)據(jù)成員的A類的UML圖A-a : const int-b : const int=10+A(i : int)+print() : void#include using namespace std; class A p
12、ublic:A(int i);void print();private:const inta;類實(shí)現(xiàn)文件(*cpp文件)類的使用文件(*cpp,主函數(shù)文件)每個源程序文件稱為一個編譯單元。C+加法要求一個類的聲明必須出現(xiàn)在所有使用該類的編譯單元中慣用的做法將類的聲明寫在頭文件中,使用該類的編譯單元則包含這個頭文件。例5-10具有靜態(tài)數(shù)據(jù)、函數(shù)成員的 Point類,多文件組織。*E e w包Debiig*甄:歸皿e-point麻45有索idlpint 滸康id-2-8文件,也可以是.cpp文件#include兩上書寫方式#include文件名,按照標(biāo)準(zhǔn)方式搜索要嵌入的文件,該文件位于C+S統(tǒng)目錄
13、的include子目錄下,一般包含系統(tǒng)提供的標(biāo)準(zhǔn)文件時采用這樣的方式。#include”文件名”,首先在當(dāng)前目錄下搜索要嵌入的文件,若沒有,再按照 標(biāo)準(zhǔn)方式搜索,對用戶自己編寫的文件一般采用這種方式。在使用多文件結(jié)構(gòu)時,注意內(nèi)聯(lián)函數(shù)的特殊性一個內(nèi)聯(lián)函數(shù),需要在每個調(diào)用它的編譯單元中給出一個完全一致的實(shí)現(xiàn)。 慣用的做法是將內(nèi)聯(lián)函數(shù)的實(shí)現(xiàn)寫在頭文件中,由調(diào)用的編譯單元包含這個頭 文件。外部變量與外部函數(shù)P170用extern聲明外部變量。外部變量是具有文件作用域的變量,定義在所有文件之外。聲明一個外部變量時,可以同時定義它,也可以只是引用一個在別處聲明 的外部變量。外部函數(shù)非成員函數(shù)具有文件作用域
14、,可以在不同的編譯單元被調(diào)用,只要在調(diào)用 之前聲明函數(shù)原型即可??梢栽诼暶骱瘮?shù)原型或定義函數(shù)時用 extern修飾,其效果與不加修飾的默 認(rèn)狀態(tài)是一樣的。若在聲明一個函數(shù)原型時或定義函數(shù)時冠以static修飾,就將函數(shù)的作用域限制在當(dāng)前的編譯單元內(nèi)。標(biāo)準(zhǔn) C+庫 P172標(biāo)準(zhǔn)C+談與組件在邏輯上分為6種類型:輸入/輸出類容器類與ADT (抽象數(shù)據(jù)類型)存儲管理類算法錯誤處理運(yùn)行環(huán)境支持對庫中預(yù)定義內(nèi)容的說明分別存在于不同的頭文件中,要使用這些預(yù)定義 的成分,就要將相應(yīng)的頭文件包含到源程序中。標(biāo)準(zhǔn)C+航不再有“.h”擴(kuò)展名,但仍保留18個帶有“.h”擴(kuò)展名的C頭文 件。兩種形式的頭文件不能混用。
15、比如,若已經(jīng)包含頭文件iostream ,就不能再包含,而要代之以新的頭文件cmath。使用標(biāo)準(zhǔn)C+針時,在緊接著所有的include指令之后,加入using namespacestd;將指定命名空間中的名稱引入到當(dāng)前命名空間中。否則,需要在使用std命名空間中的標(biāo)識符時冠以命名空間名“二”。(第10 章)編譯預(yù)處理P173編譯器在對源程序進(jìn)行編譯之前,首先要由預(yù)處理程序?qū)Τ绦蛭谋具M(jìn)行預(yù) 處理。預(yù)處理程序提供了一組編譯預(yù)處理指令和預(yù)處理操作符。所有的預(yù)處理指令在程序中都是以“ #”來引導(dǎo),每一條預(yù)處理指令單獨(dú)占 用一行,不要用分號結(jié)束。預(yù)處理指令可以根據(jù)需要出現(xiàn)在程序中的任何位置。#inclu
16、de指令(文件包含指令)其作用是將另一個源文件嵌入到當(dāng)前源文件中該點(diǎn)處。include文件名按標(biāo)準(zhǔn)方式搜索,文件位于 C+S統(tǒng)目錄的include子目錄下。include文件名首先在當(dāng)前目錄中搜索,若沒有,再按標(biāo)準(zhǔn)方式控索。#define 和#口口6 指令#de巾ne用來定義符號常量, 例如,#define PI。#undef用來刪除由#de巾ne定義的宏,使之不再起作用。3.條件編譯指令用來限定程序中的某些內(nèi)容要在滿足一定條件的情況下才參與編譯。常用的條件編譯語句有下列5種形式:形式1#if常量表達(dá)式程序段1 2” .#elif常量表達(dá)式n程序段n defined操作符de巾ned是一個預(yù)處
17、理操作符,而不是指令,因此不要以#開頭。defined (標(biāo)識符)若“標(biāo)識符”在此前經(jīng) #define定義過,且未經(jīng)#undef刪除,則上述表達(dá) 式為非0,否則為0。下面兩種寫法是完全等效的:#ifndef MYHEAD_H#define MYHEAD_H.#endif#if !define(MYHEAD_H)#define MYHEAD_H.#endif由于文件包含指令可以嵌套使用,在設(shè)計(jì)程序時要避免多次重復(fù)包含同一 個頭文件,否則會引起變量及類的重復(fù)定義?;谏弦徽碌睦?-7。在類employee中增加一個靜態(tài)數(shù)據(jù)成員 employeeNo來設(shè)置 本公司編號目前最大值,新增加的人員編號將在
18、創(chuàng)建對象的同時自動 在當(dāng)前最大值基礎(chǔ)上增加,從而減少了調(diào)用成員函數(shù) IncreaseEmpNo(int steps)的麻煩。將empolyee類的聲明部分和實(shí)現(xiàn)部分分成兩個文件。例5-11人員信息管理程序整個程序分為三個文件:是類定義頭文件是類實(shí)現(xiàn)文件是主函數(shù)文件圖5-9小型公司的人員信息管理程序的 UML圖employeeindividualEmpNo : int # grade :intaccumPay float# employeeNo :int=1000+ employee。+ employee()+ promote(: int) : void+ SetaccumPay( float)
19、 : void+ GetindividualEmpNo() :int + Getgrade() :int+ GetaccumPay() float類聲明頭文件:/class employeeprotected:int individualEmpNo”個人編號int grade;/ 級別float accumPay/ 月薪static int employeeNo;/本公司職員編號目前最大值 public:employee。;/構(gòu)造函數(shù)-employee。/析構(gòu)函數(shù)void promote(int);/升級void SetaccumPayfloat);/ 設(shè)置月薪 int Getindividu
20、alEmpNo()/提取編號 int Getgrade()/提取級另1J float GetaccumPay()/ 提取月薪;類實(shí)現(xiàn)程序文件:/#include #include using namespace std;int employee:employeeNo=1000員工編號基數(shù),靜態(tài)變量定義和初始化employee:employee()/新輸入員工編號為目前最大編號加1,級別初值為1,月薪總額 individualEmpNo=employeeNo+; grade=1; accumPay; employee:employee()void employee二promote(int incre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 標(biāo)準(zhǔn)砂石購銷合同文本
- 糧油采購及供應(yīng)協(xié)議
- 購銷攝像機(jī)合同
- 飼料添加劑采購合同的合同風(fēng)險防范
- 車庫出租合同書范例
- 云服務(wù)遷移合同
- 項(xiàng)目服務(wù)合同的法律責(zé)任認(rèn)定
- 煤礦安全文明生產(chǎn)與質(zhì)量標(biāo)準(zhǔn)化
- 自駕車服務(wù)暢行無阻
- 家居采購合同的簽訂要點(diǎn)
- 全國第三屆職業(yè)技能大賽(數(shù)字孿生應(yīng)用技術(shù))選拔賽理論考試題庫(含答案)
- 應(yīng)用數(shù)理統(tǒng)計(jì)知到智慧樹章節(jié)測試課后答案2024年秋中國農(nóng)業(yè)大學(xué)
- 大國三農(nóng)II-農(nóng)業(yè)科技版智慧樹知到期末考試答案章節(jié)答案2024年中國農(nóng)業(yè)大學(xué)
- JBT 1472-2023 泵用機(jī)械密封 (正式版)
- 二級公立醫(yī)院績效考核三級手術(shù)目錄(2020版)
- 6人小品《沒有學(xué)習(xí)的人不傷心》臺詞完整版
- 部編本小學(xué)五年級上冊語文期末考試(選擇題)專項(xiàng)訓(xùn)練題及答案
- 讀《讓兒童在問題中學(xué)數(shù)學(xué)》有感范文三篇
- 陳述句改成雙重否定句(課堂PPT)
- 人教版六年級數(shù)學(xué)上冊總復(fù)習(xí)教案
- 自閉癥兒童行為檢核表學(xué)前版
評論
0/150
提交評論