第6章 C++程序的結(jié)構(gòu).ppt_第1頁
第6章 C++程序的結(jié)構(gòu).ppt_第2頁
第6章 C++程序的結(jié)構(gòu).ppt_第3頁
第6章 C++程序的結(jié)構(gòu).ppt_第4頁
第6章 C++程序的結(jié)構(gòu).ppt_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第六章 C+程序的結(jié)構(gòu),C+語言程序設(shè)計(jì),2,本章主要內(nèi)容,變量的類型 作用域與可見性 文件結(jié)構(gòu)與編譯預(yù)處理命令 名字空間,6.1 變量的類型,除了按數(shù)據(jù)類型區(qū)分變量外,根據(jù)變量定義的位置,可以把變量分成全局變量與局部變量。全局變量是指定義在函數(shù)體外部的變量,它能被所有函數(shù)使用。局部變量是指定義在函數(shù)或復(fù)合語句中的變量,只能在函數(shù)或復(fù)合語句中使用。,4,變量的存儲類型,auto存儲類 屬于一時性存儲,其存儲空間可以被若干變量多次覆蓋使用。 register存儲類 存放在通用寄存器中。 extern存儲類 在所有函數(shù)和程序段中都可引用。 static存儲類 在內(nèi)存中是以固定地址存放的,在整個程序

2、運(yùn)行期間都有效。,運(yùn)行結(jié)果: in p1 G=11 in p2 G=22 in p2 g=222 in p G=22 in p g=222,運(yùn)行結(jié)果: m=1 n=1 m=1 n=2 m=1 n=3 m=1 n=4,6.1.2 變量的存儲類型,static型變量,6.1.3 變量在內(nèi)存中的存儲,當(dāng)一個程序準(zhǔn)備運(yùn)行時,操作系統(tǒng)會為程序分配一塊內(nèi)存空間,C+程序的內(nèi)存通常被分為四個區(qū): 全局?jǐn)?shù)據(jù)區(qū)(data area) 代碼區(qū)(code area) 棧區(qū)(stack area) 堆區(qū)(heap area) 全局變量、靜態(tài)變量、字符串常量、常變量存放在全局?jǐn)?shù)據(jù)區(qū);所有的函數(shù)和代碼存放在代碼區(qū);為運(yùn)行

3、函數(shù)而分配的函數(shù)參數(shù)、局部變量、返回地址存放在棧區(qū);堆區(qū)用于動態(tài)內(nèi)存分配。 變量的生存期為從產(chǎn)生到消失的時期。全局變量、靜態(tài)變量、常變量生存周期為整個程序的生存周期,因此稱為靜態(tài)生存期;局部變量的生存周期起于函數(shù)調(diào)用,結(jié)束于函數(shù)調(diào)用結(jié)束,其生存期是動態(tài)的,因此稱為動態(tài)生存期。,注意: 堆空間不是系統(tǒng)為程序自動分配的,它是程序執(zhí)行過程中由new語句為變量分配的。即使指向堆空間的指針變量消失,new語句分配的空間也不會消失。new語句分配的空間由delete語句釋放。,6.1.3 變量在內(nèi)存中的存儲,常變量(常量)、全局變量、局部靜態(tài)變量、字符串常量在程序運(yùn)行前在數(shù)據(jù)區(qū)進(jìn)行分配。并且依次按照常變量

4、、全局變量、局部靜態(tài)變量的順序從低地址向高地址分配。常變量按定義的先后次序分配,全局變量、局部變量也一樣。,運(yùn)行結(jié)果: Adddress of parameter variable: ,radius 的作用域僅在于此,不能用于程序正文其它地方,因而可有可無。,作用域與可見性,12,塊作用域,在塊( 標(biāo)記的一段程序單元)中聲明的標(biāo)識符,其作用域自聲明處起,限于塊中,例如: void fun(int a) int b(a); cinb; if (b0) int c; . ,作用域與可見性,13,類和文件作用域,類作用域作用于特定的成員名,類及其對象有特殊的訪問和作用域規(guī)則。 不在前述各個作用域中出

5、現(xiàn)的聲明,具有文件作用域,這樣聲明的標(biāo)識符的作用域開始于聲明點(diǎn),結(jié)束于文件尾。,作用域與可見性,程序?qū)嵗?14,可見性的概念,可見性是從對標(biāo)識符的引用的角度來談的概念。 可見性表示從內(nèi)層作用域向外層作用域“看”時能看見什么。 如果標(biāo)識在某處可見,則就可以在該處引用此標(biāo)識符。,作用域與可見性,15,可見性的一般規(guī)則,標(biāo)識符應(yīng)聲明在先,引用在后。 在同一作用域中,不能聲明同名的標(biāo)識符。 對于兩個嵌套的作用域,如果某個標(biāo)識符在外層中聲明,且在內(nèi)層中沒有同一標(biāo)識符的聲明,則該標(biāo)識符在內(nèi)層可見。 對于兩個嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標(biāo)識符,則外層作用域的標(biāo)識符在內(nèi)層不可見。

6、,作用域與可見性,16,例,#include int i; /文件作用域 int main() i = 5; int i;/塊作用域 i = 7; couti= i endl;/輸出7 couti= i ;/輸出5 return 0; ,作用域與可見性,返 回,17,例2 塊作用域?qū)ο蟮纳嫫?#include void fun(); void main() fun(); fun(); void fun() static int a=1; int i=5; a+; i+; couti=i,a=aendl; ,i,a均為塊作用域 i是動態(tài)生存期 a是靜態(tài)生存期 運(yùn)行結(jié)果: i=6, a=2 i=

7、6, a=3,對象的生存期,18,變量的生存期與可見性,全局變量 具有靜態(tài)生存期。 靜態(tài)局部變量 有全局壽命,局部可見。 只第一次進(jìn)入函數(shù)時被初始化。 一般局部變量 具有動態(tài)生存期。 每次進(jìn)入函數(shù)時都初始化。,對象的生存期,19,數(shù)據(jù)與函數(shù),數(shù)據(jù)存儲在局部對象中,通過參數(shù)傳遞實(shí)現(xiàn)共享函數(shù)間的參數(shù)傳遞。 數(shù)據(jù)存儲在全局對象中。 將數(shù)據(jù)和使用數(shù)據(jù)的函數(shù)封裝在類中。,例,例,#include int global; void f() global=5; void g() coutglobalendl; ,int main() f(); g(); /輸出“5” return 0; ,返 回,例 函數(shù)間

8、數(shù)據(jù)共享,21,6.3 編譯預(yù)處理命令,#include 包含指令 將一個源文件嵌入到當(dāng)前源文件中該點(diǎn)處。 #include 按標(biāo)準(zhǔn)方式搜索,文件位于C+系統(tǒng)目錄的include子目錄下 #include文件名 首先在當(dāng)前目錄中搜索,若沒有,再按標(biāo)準(zhǔn)方式搜索。 #define 宏定義指令 定義符號常量,已被const定義語句取代。 定義帶參數(shù)宏,已被內(nèi)聯(lián)函數(shù)取代。 #undef 刪除由#define定義的宏,使之不再起作用。,22,條件編譯指令:#if 和 #endif,#if 常量表達(dá)式 /當(dāng)“ 常量表達(dá)式”非零時編譯 程序正文 #endif .,編譯預(yù)處理命令,23,條件編譯指令:#els

9、e,#if 常量表達(dá)式 /當(dāng)“ 常量表達(dá)式”非零時編譯 程序正文1 #else /當(dāng)“ 常量表達(dá)式”為零時編譯 程序正文2 #endif,編譯預(yù)處理命令,24,條件編譯指令:#elif,#if 常量表達(dá)式1 程序正文1 /當(dāng)“ 常量表達(dá)式1”非零時編譯 #elif 常量表達(dá)式2 程序正文2 /當(dāng)“ 常量表達(dá)式2”非零時編譯 #else 程序正文3 /其它情況下編譯 #endif,編譯預(yù)處理命令,6.4 名字空間,一個軟件往往由多個模塊(組件)組成,這些模塊由不同程序員(軟件商)提供,不同模塊可能使用了相同的標(biāo)識符。簡單說就是同一個名字在不同模塊中代表不同的事物。當(dāng)這些模塊用到同一個程序中,同名

10、標(biāo)識符就引起沖突。C+提供名字空間(namespace) 將相同的名字放在不同空間中來防止命名沖突。 定義一個名字空間的格式如下: 其中: namespace 為關(guān)鍵字。 名稱為名字空間標(biāo)識符。 成員為函數(shù)、變量、常量、自定義類型等。,namespace 名稱 成員; ,6.4 名字空間,例如: 一個名為TsingHua的軟件公司為自己的組件建立了一個名字空間。將它存入頭文件:TsingHua.h,/*TsingHua.h*/ namespace TsingHua int year=2005; char name=TsingHua Software; ShowName() coutnameendl; ,6.4 名字空間,(1)個別使用聲明方式,格式如下: 其中: :為作用域分辨符。 成員使用形式包括函數(shù)調(diào)用式、變量名、常量名、類型名等,C+語言程序設(shè)計(jì)教程 第5章 構(gòu)造數(shù)據(jù)類型,名字空間名:成員使用形式,6.4 名字空間,(2)全局聲明方式: 這種方式表明此后使用的成員來自于聲明處的名字空間,程序p6_6.cpp中第6行: using namespace std; 表明此后使用的名字空間為C+標(biāo)準(zhǔn)庫名字空間std,此后的cout、endl均來自名字空間std。 (3) 全局聲明個別成員: 這種聲明形式表明以后使用的成員M來自名字空間N。成員名M為函數(shù)、變量、常量、類型的

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論