第五章 多文件結(jié)構(gòu)_第1頁
第五章 多文件結(jié)構(gòu)_第2頁
第五章 多文件結(jié)構(gòu)_第3頁
第五章 多文件結(jié)構(gòu)_第4頁
第五章 多文件結(jié)構(gòu)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、作用域與可見性作用域與可見性對象的生存期對象的生存期數(shù)據(jù)與函數(shù)數(shù)據(jù)與函數(shù)靜態(tài)成員靜態(tài)成員共享數(shù)據(jù)的保護(hù)共享數(shù)據(jù)的保護(hù)友元友元編譯預(yù)處理命令編譯預(yù)處理命令多文件結(jié)構(gòu)和工程多文件結(jié)構(gòu)和工程5-1-1 標(biāo)識符作用域標(biāo)識符作用域 1函數(shù)原型作用域函數(shù)原型作用域 例如,以下函數(shù)原型編譯器認(rèn)為是相同的:例如,以下函數(shù)原型編譯器認(rèn)為是相同的:double funPrototype ( double , double ) ;double funPrototype ( double a , double b ) ;double funPrototype ( double x , double y ) ; 函數(shù)原

2、型形式參數(shù)表中的標(biāo)識符具有函數(shù)原型作用域函數(shù)原型形式參數(shù)表中的標(biāo)識符具有函數(shù)原型作用域 作用域作用域指標(biāo)識符能夠被使用的范圍。只有在作用域內(nèi)標(biāo)識符才可以被指標(biāo)識符能夠被使用的范圍。只有在作用域內(nèi)標(biāo)識符才可以被訪問(稱為可見)。訪問(稱為可見)。 函數(shù)原型中的參數(shù),其作用域始于函數(shù)原型中的參數(shù),其作用域始于(,結(jié)束于,結(jié)束于)。 例如,設(shè)有下列原型聲明:例如,設(shè)有下列原型聲明:double Area(double radius);double Area(double radius);radius 的作用域僅在于此,不能用于程序正文其他地方,因而可有可無。2塊作用域塊作用域 在語句塊中聲明的標(biāo)識符

3、具有塊作用域在語句塊中聲明的標(biāo)識符具有塊作用域 / 例例 不同作用域的同名變量不同作用域的同名變量#includeusing namespace std ;int main() int a = 1;/ 外層的外層的a int a = 1 ;/ 內(nèi)層的內(nèi)層的a a + ; cout inside a = a endl ; / 內(nèi)層的內(nèi)層的a作用域結(jié)束作用域結(jié)束cout outside a = a endl ;/ 外層的外層的a作用域結(jié)束作用域結(jié)束2塊作用域塊作用域 在語句塊中聲明的標(biāo)識符具有塊作用域在語句塊中聲明的標(biāo)識符具有塊作用域 / 例例3-25 不同作用域的同名變量不同作用域的同名變量#i

4、ncludeusing namespace std ;int main() int = 1;/ 外層的外層的a int a = 1 ;/ 內(nèi)層的內(nèi)層的a a + ; cout inside a = a endl ; / 內(nèi)層的內(nèi)層的a作用域結(jié)束作用域結(jié)束cout outside a = M4類作類作用域用域 5文件作用域文件作用域 任何在函數(shù)之外聲明的標(biāo)識符具有文件作用域任何在函數(shù)之外聲明的標(biāo)識符具有文件作用域 這種標(biāo)識符從聲明處起至文件尾的任何函數(shù)都可見這種標(biāo)識符從聲明處起至文件尾的任何函數(shù)都可見 / 例例 使用文件作用域變量使用文件作用域變量#include using namespace

5、 std ;int a = 1, b = 1 ;void f1( int x ) a = x * x ; b = a * x ;int c ; void f2( int x, int y ) a = x y ? x : y ; b = x y ? x : y ; c = x + y ; int main() f1( 4 ) ; cout call function f1 :n ; cout a = a , b = b endl ; f2 (10, 23 ) ; cout call function f2 :n ; cout a = a , b = b , c = c endl ;/ 例例 使用

6、文件作用域變量使用文件作用域變量#include using namespace std ;int a = 1, b = 1 ;void f1( int x ) a = x * x ; b = a * x ;int c ; void f2( int x, int y ) a = x y ? x : y ; b = x y ? x : y ; c = x + y ; int main() f1( 4 ) ; cout call function f1 :n ; cout a = a , b = b endl ; f2 (10, 23 ) ; cout call function f2 :n ;

7、cout a = a , b = b , c = endl ;/ a, b的作用域從這里開始的作用域從這里開始/ f1函數(shù)可以訪問函數(shù)可以訪問a,b/ f2函數(shù)可以訪問函數(shù)可以訪問a, b/ main 函數(shù)可以訪問函數(shù)可以訪問a, b/ 例例 使用文件作用域變量使用文件作用域變量#include using namespace std ;int a = 1, b = 1 ;void f1( int x ) a = x * x ; b = a * x ;int c ; void f2( int x, int y ) a = x y ? x : y ; b = x y ? x : y ; c =

8、x + y ; int main() f1( 4 ) ; cout call function f1 :n ; cout a = a , b = b endl ; f2 (10, 23 ) ; cout call function f2 :n ; cout a = a , b = b , c = endl ;/ a, b的作用域從這里開始的作用域從這里開始/ f1函數(shù)可以訪問函數(shù)可以訪問a,b/ f2函數(shù)可以訪問函數(shù)可以訪問a, b/ main 函數(shù)可以訪問函數(shù)可以訪問a, b/ 的作用域從這里開始,默認(rèn)初始值為的作用域從這里開始,默認(rèn)初始值為0/ f2函數(shù)可以訪問函數(shù)可以訪問a, b, /

9、main 函數(shù)可以訪問函數(shù)可以訪問a, b, 6全局變量和局部變量全局變量和局部變量 具有文件作用域的變量稱為全局變量;具有函數(shù)作用域具有文件作用域的變量稱為全局變量;具有函數(shù)作用域 或塊作用域的變量稱為局部變量或塊作用域的變量稱為局部變量 全局變量聲明時(shí)默認(rèn)初始值為全局變量聲明時(shí)默認(rèn)初始值為0 0 當(dāng)局部量與全局量同名,在塊內(nèi)當(dāng)局部量與全局量同名,在塊內(nèi)全局量全局量 為了在塊內(nèi)訪問全局量,可以用域運(yùn)算符為了在塊內(nèi)訪問全局量,可以用域運(yùn)算符 : : 6全局變量和局部變量全局變量和局部變量 / 在函數(shù)體內(nèi)訪問全局變量在函數(shù)體內(nèi)訪問全局變量#includeusing namespace std ;

10、int x ;int main() int x = 256 ; cout global variable x = :x endl ; cout local variable x = x endl ;6全局變量和局部變量全局變量和局部變量 / 在函數(shù)體內(nèi)訪問全局變量在函數(shù)體內(nèi)訪問全局變量#includeusing namespace std ;int ;int main() int x = 256 ; cout global variable x = endl ; cout local variable x = x endl ;訪問全局量訪問全局量6全局變量和局部變量全局變量和局部變量 / 在函

11、數(shù)體內(nèi)訪問全局變量在函數(shù)體內(nèi)訪問全局變量#includeusing namespace std ;int x ;int main() int = 256 ; cout global variable x = :x endl ; cout local variable x = endl ;訪問局部量訪問局部量6全局變量和局部變量全局變量和局部變量 / 在函數(shù)體內(nèi)訪問全局變量在函數(shù)體內(nèi)訪問全局變量#includeusing namespace std ;int x ;int main() int x = 256 ; cout global variable x = :x endl ; cout l

12、ocal variable x = x endl ;7 命命名空間名空間 命名空間是類、函數(shù)、對象、類型和其他名字的集合。命名空間是類、函數(shù)、對象、類型和其他名字的集合。 命名空間令軟件組件之間不會產(chǎn)生命名沖突。命名空間令軟件組件之間不會產(chǎn)生命名沖突。 std是是C+的標(biāo)準(zhǔn)名空間,包含了標(biāo)準(zhǔn)頭文件中各種名字的聲明。的標(biāo)準(zhǔn)名空間,包含了標(biāo)準(zhǔn)頭文件中各種名字的聲明。 標(biāo)標(biāo)準(zhǔn)名空間準(zhǔn)名空間 C+標(biāo)準(zhǔn)頭文件沒有擴(kuò)展名。標(biāo)準(zhǔn)頭文件沒有擴(kuò)展名。iostream iomanip limit fstream string typeinfo stdexcept 使用標(biāo)準(zhǔn)類庫的組件時(shí),需要指定名空間。使用標(biāo)準(zhǔn)類庫

13、的組件時(shí),需要指定名空間。 C+標(biāo)準(zhǔn)名空間標(biāo)準(zhǔn)名空間 std/方法一:方法一:#includeusing namespace std;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /方法一:方法一:#includeusing namespace std;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /包含頭文件包含頭文件/方法一:方法一:#includeusing namespace std;int main() int a, b; cin

14、a; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /包含頭文件/使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間std/方法一:方法一:#includeusing namespace std;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /包含頭文件/使用標(biāo)準(zhǔn)名空間std/使用使用std的元素的元素cin/方法一:方法一:#includeusing namespace std;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /包含頭文件

15、/使用標(biāo)準(zhǔn)名空間std/使用std的元素cin/使用使用std的元素的元素cout/方法一:方法一:#includeusing namespace std;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /包含頭文件包含頭文件/指定使用名空間指定使用名空間std/使用使用std的元素的元素cin/使用使用std的元素的元素cin/使用使用std的元素的元素cout/方法二:方法二:#includeusing std:cin; using std:cout;int main() int a, b; cina; cinb;

16、 couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /方法二:方法二:#includeusing std:cin; using std:cout;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /指定使用指定使用std的元素的元素cin /方法二:方法二:#includeusing std:cin; using std:cout;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /指定使用std的元素cin /指定使用指定使用std的元素

17、的元素cout /方法二:方法二:#includeusing std:cin; using std:cout;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /指定使用std的元素cin /指定使用std的元素cout /使用使用std的元素的元素cin/方法二:方法二:#includeusing std:cin; using std:cout;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /指定使用std的元素cin /指定使用std的元素

18、cout /使用std的元素cin/使用使用std的元素的元素cout/方法二:方法二:#includeusing std:cin; using std:cout;int main() int a, b; cina; cinb; couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /指定使用指定使用std的元素的元素cin /指定使用指定使用std的元素的元素cout /使用使用std的元素的元素cin/使用使用std的元素的元素cout/方法三:方法三:#includeint main() int a, b; std:cina; std:cinb; std:couta+b=a+bn;

19、使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /方法三:方法三:#includeint main() int a, b; std:cina; std:cinb; std:couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /指定使用指定使用std的元素的元素cin /方法三:方法三:#includeint main() int a, b; std:cina; std:cinb; std:couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /指定使用指定使用std的元素的元素cin /指定使用指定使用std的元素的元素cout /方法三:方法三:#includeint main() int a, b

20、; std:cina; std:cinb; std:couta+b=a+bn; 使用標(biāo)準(zhǔn)名空間使用標(biāo)準(zhǔn)名空間 /指定使用指定使用std的元素的元素cin /指定使用指定使用std的元素的元素cout 定定義名空間義名空間 定義命名空間語法:定義命名空間語法:namespace namespace A void f(); void g(); namespace B void h(); namespace C /嵌套命名空間嵌套命名空間 void i(); namespace A /為為namespace A追加說明追加說明 void j(); 定義名空間定義名空間定義命名空間語法:定義命名空間語

21、法:using namespace 名空間名空間 ;或或using 名空間名空間:元素元素 ;/例例 演示命名空間的使用演示命名空間的使用 #includeusing namespace std;namespace A void f() cout f() : from namespace An; void g() cout g() : from namespace An ; namespace B void f() cout f() : from namespace Bn ; namespace C void f() cout f() : from namespace Cn ; void g(

22、) cout g() : from global namespace“ endl ;int main() g() ; using namespace A; f() ; B:f() ; B:C:f() ; A:g() ;調(diào)用非命名空間調(diào)用非命名空間函數(shù)函數(shù)g() 使用命名空間使用命名空間A調(diào)用命名空間調(diào)用命名空間函數(shù)函數(shù)A:g() 調(diào)用函數(shù)調(diào)用函數(shù)A:B:f() 調(diào)用函數(shù)調(diào)用函數(shù)A:B:C:f() 調(diào)用函數(shù)調(diào)用函數(shù)A:g() 2可見性可見性 可見性可見性從另一個(gè)角度說明標(biāo)識符的有效性,可見性與作用域具從另一個(gè)角度說明標(biāo)識符的有效性,可見性與作用域具有一定的一致性。有一定的一致性。標(biāo)識符的作用域包

23、含可見范圍,可見范圍不標(biāo)識符的作用域包含可見范圍,可見范圍不會超過作用域會超過作用域??梢娦栽诶斫馔麡?biāo)識符的。可見性在理解同名標(biāo)識符的作用域嵌套作用域嵌套時(shí)十分時(shí)十分直觀。直觀。對于外層塊與內(nèi)層塊定義了同名標(biāo)識符的,在外層作用域中,對于外層塊與內(nèi)層塊定義了同名標(biāo)識符的,在外層作用域中,內(nèi)層所定義的標(biāo)識符是不可見的,即外層引用的是外層所定義內(nèi)層所定義的標(biāo)識符是不可見的,即外層引用的是外層所定義的標(biāo)識符;同樣,的標(biāo)識符;同樣,在內(nèi)層作用域中,外層的標(biāo)識符將被內(nèi)層的在內(nèi)層作用域中,外層的標(biāo)識符將被內(nèi)層的同名標(biāo)識符屏蔽,變得不可見同名標(biāo)識符屏蔽,變得不可見,即外層中同名標(biāo)識符的可見范,即外層中同名標(biāo)

24、識符的可見范圍為作用域中挖去內(nèi)層塊的范圍。圍為作用域中挖去內(nèi)層塊的范圍。2可見性可見性 下面的程序段和圖示顯示作用域與下面的程序段和圖示顯示作用域與可見性??梢娦浴?int m=1;float x; float m=3.5; X=5.5;m+; int m, float x作用域作用域int m可見可見float m不可見不可見x可見可見float m作用域作用域float m可見可見int m不可見不可見x可見可見 5-2 生命期生命期 生命期(生命期(Life timeLife time)也叫生存期。生命期與存儲區(qū)域相關(guān),)也叫生存期。生命期與存儲區(qū)域相關(guān),存儲區(qū)域分為代碼區(qū)、靜態(tài)數(shù)據(jù)區(qū)、

25、棧區(qū)和堆區(qū),相應(yīng)地,存儲區(qū)域分為代碼區(qū)、靜態(tài)數(shù)據(jù)區(qū)、棧區(qū)和堆區(qū),相應(yīng)地,生命期分為生命期分為靜態(tài)生命期、局部生命期和動態(tài)生命期靜態(tài)生命期、局部生命期和動態(tài)生命期。(1)靜態(tài)生命期靜態(tài)生命期 靜態(tài)生命期靜態(tài)生命期指的是標(biāo)識符從程序開始運(yùn)行時(shí)指的是標(biāo)識符從程序開始運(yùn)行時(shí)存在,即具有存儲空間,到程序運(yùn)行結(jié)束時(shí)消亡,存在,即具有存儲空間,到程序運(yùn)行結(jié)束時(shí)消亡,即釋放存儲空間。具有靜態(tài)生命期的標(biāo)識符存放即釋放存儲空間。具有靜態(tài)生命期的標(biāo)識符存放在靜態(tài)數(shù)據(jù)區(qū),屬于靜態(tài)存儲類型,如全局變量、在靜態(tài)數(shù)據(jù)區(qū),屬于靜態(tài)存儲類型,如全局變量、靜態(tài)全局變量、靜態(tài)局部變量。靜態(tài)全局變量、靜態(tài)局部變量。具有靜態(tài)生命期具有

26、靜態(tài)生命期的標(biāo)識符在未被用戶初始化的情況下,系統(tǒng)會自的標(biāo)識符在未被用戶初始化的情況下,系統(tǒng)會自動將其初始化為全動將其初始化為全0 0。 函數(shù)駐留在代碼區(qū),也具有靜態(tài)生命期。所函數(shù)駐留在代碼區(qū),也具有靜態(tài)生命期。所有具有文件作用域的標(biāo)識符都具有靜態(tài)生命期。有具有文件作用域的標(biāo)識符都具有靜態(tài)生命期。(2)局部生命期局部生命期 在函數(shù)內(nèi)部或塊中定義的標(biāo)識符具有局部生命在函數(shù)內(nèi)部或塊中定義的標(biāo)識符具有局部生命期,其生命期開始于執(zhí)行到該函數(shù)或塊的標(biāo)識符聲期,其生命期開始于執(zhí)行到該函數(shù)或塊的標(biāo)識符聲明處,結(jié)束于該函數(shù)或塊的結(jié)束處。具有靜態(tài)生命明處,結(jié)束于該函數(shù)或塊的結(jié)束處。具有靜態(tài)生命期的標(biāo)識符存放在棧區(qū)

27、。期的標(biāo)識符存放在棧區(qū)。具有局部生命期的標(biāo)識符具有局部生命期的標(biāo)識符如果未被初始化,其內(nèi)容是隨機(jī)的,不可用如果未被初始化,其內(nèi)容是隨機(jī)的,不可用。 具有局部生命期的標(biāo)識符必定具有局部作用域;具有局部生命期的標(biāo)識符必定具有局部作用域;但反之不然,但反之不然,靜態(tài)局部變量具有局部作用域,但卻靜態(tài)局部變量具有局部作用域,但卻具有靜態(tài)生命期具有靜態(tài)生命期。(3)動態(tài)生命期動態(tài)生命期 具有動態(tài)生命期的標(biāo)識符由特定的函數(shù)調(diào)具有動態(tài)生命期的標(biāo)識符由特定的函數(shù)調(diào)用或運(yùn)算來創(chuàng)建和釋放用或運(yùn)算來創(chuàng)建和釋放,如調(diào)用,如調(diào)用mallocmalloc()()或用或用newnew運(yùn)算符為變量分配存儲空間時(shí),變量的生命運(yùn)算

28、符為變量分配存儲空間時(shí),變量的生命期開始,而調(diào)用期開始,而調(diào)用free()free()或用或用deletedelete運(yùn)算符釋放運(yùn)算符釋放空間或程序結(jié)束時(shí),變量生命期結(jié)束。具有動空間或程序結(jié)束時(shí),變量生命期結(jié)束。具有動態(tài)生命期的變量存放在堆區(qū)。關(guān)于態(tài)生命期的變量存放在堆區(qū)。關(guān)于newnew運(yùn)算和運(yùn)算和deletedelete運(yùn)算將在指針一章中介紹。運(yùn)算將在指針一章中介紹。 #includevoid fun();int main() fun(); fun();void fun() static int a=1; int i=5; a+; i+; couti=i,a=aendl;運(yùn)行結(jié)果:i=6,

29、 a=2i=6, a=3i是動態(tài)生存期a是靜態(tài)生存期例5-2 變量的生存期與可見性#includeint i=1; / i 為全局變量,具有靜態(tài)生存期。int main() static int a;/ 靜態(tài)局部變量,有全局壽命,局部可見。 int b=-10; / b, c為局部變量,具有動態(tài)生存期。 int c=0; void other(void); cout-MAIN-n; cout i: i a: a b: b c: cendl; c=c+8; other(); cout-MAIN-n; cout i: i a: a b: b c: cendl; i=i+10; other(); v

30、oid other(void) static int a=2; static int b; / a,b為靜態(tài)局部變量,具有全局壽命,局部可見。 /只第一次進(jìn)入函數(shù)時(shí)被初始化。 int c=10; / C為局部變量,具有動態(tài)生存期, /每次進(jìn)入函數(shù)時(shí)都初始化。 a=a+2; i=i+32; c=c+5; cout-OTHER-n; cout i: i a: a b: b c: cendl; b=a;17運(yùn)行結(jié)果:-MAIN- i: 1 a: 0 b: -10 c: 0-OTHER- i: 33 a: 4 b: 0 c: 15-MAIN- i: 33 a: 0 b: -10 c: 8-OTHER-

31、 i: 75 a: 6 b: 4 c: 1518例5-3具有靜態(tài)、動態(tài)生存期對象的時(shí)鐘程序#includeclass Clock/時(shí)鐘類聲明public:/外部接口Clock();void SetTime(int NewH, int NewM, int NewS); /三個(gè)形參均具有函數(shù)原型作用域void ShowTime();Clock()private:/私有數(shù)據(jù)成員int Hour,Minute,Second;/時(shí)鐘類成員函數(shù)實(shí)現(xiàn)Clock:Clock() /構(gòu)造函數(shù) Hour=0;Minute=0;Second=0;void Clock:SetTime(int NewH,int New

32、M,int NewS) Hour=NewH;Minute=NewM;Second=NewS;void Clock:ShowTime() coutHour:Minute:Secondendl;20Clock globClock;/聲明對象globClock, /具有靜態(tài)生存期,文件作用域int main()/主函數(shù)coutFirst time output:endl;/引用具有文件作用域的對象:globClock.ShowTime();/對象的成員函數(shù)具有類作用域globClock.SetTime(8,30,30);Clock myClock(globClock); /聲明具有塊作用域的對象my

33、ClockcoutSecond time output:endl;myClock.ShowTime();/引用具有塊作用域的對象21程序的運(yùn)行結(jié)果為:First time output:0:0:0Second time output:8:30:3022多多文件程序結(jié)構(gòu)文件程序結(jié)構(gòu) 一個(gè)一個(gè)C+C+程序稱為一個(gè)工程(程序稱為一個(gè)工程(.dsp.dsp) 一個(gè)工程由一個(gè)或多個(gè)文件組成一個(gè)工程由一個(gè)或多個(gè)文件組成 一個(gè)文件可以包含多個(gè)函數(shù)定義,但一個(gè)函數(shù)的定義必須一個(gè)文件可以包含多個(gè)函數(shù)定義,但一個(gè)函數(shù)的定義必須 完整地存在于一個(gè)文件中完整地存在于一個(gè)文件中 一個(gè)文件可以被多個(gè)應(yīng)用程序共享一個(gè)文件可

34、以被多個(gè)應(yīng)用程序共享多多文件結(jié)構(gòu)文件結(jié)構(gòu) 一個(gè)好的軟件系統(tǒng)應(yīng)當(dāng)分解為各種同構(gòu)邏輯文件一個(gè)好的軟件系統(tǒng)應(yīng)當(dāng)分解為各種同構(gòu)邏輯文件頭文件頭文件A頭文件頭文件B頭文件頭文件C實(shí)現(xiàn)文件實(shí)現(xiàn)文件A.cpp實(shí)現(xiàn)文件實(shí)現(xiàn)文件B .cpp實(shí)現(xiàn)文件實(shí)現(xiàn)文件C .cpp主主 文文 件件 M.cpp例例 計(jì)算圓面積和矩形面積計(jì)算圓面積和矩形面積myAreamyCircle.cppmyRect.cppmyMain.cpp例計(jì)例計(jì)算圓面積和矩形面積算圓面積和矩形面積const double pi = 3.14 ;double circle ( double radius ) return pi * radius * r

35、adius ; myCircle.cppdouble rect ( double with, double length ) return with * length ; myRect.cppdouble circle( double radius ) ;double rect( double width, double length ) ; myArea例例3-27 計(jì)算圓面積和矩形面積計(jì)算圓面積和矩形面積#includeusing namespace std ;#include myAreaint main() double width, length ; cout width lengt

36、h ; cout Area of recttangle is: rect( width, length ) endl ; double radius ; cout radius ; cout Area of circle is: circle( radius ) endl ; myMain.cpp預(yù)預(yù)處理指令處理指令 源程序源程序預(yù)處理器預(yù)處理器詞法分析詞法分析語法分析語法分析代碼生成代碼生成 錯(cuò)誤處理程序錯(cuò)誤處理程序 目標(biāo)程序目標(biāo)程序 符號表符號表 錯(cuò)誤信息錯(cuò)誤信息C+編譯器工作過程編譯器工作過程預(yù)處理器預(yù)處理器 改善程序的組織和管理改善程序的組織和管理預(yù)處理指令預(yù)處理指令 所有編譯指令以所

37、有編譯指令以 # 開頭,每條指令單獨(dú)占一行開頭,每條指令單獨(dú)占一行預(yù)預(yù)處理指令處理指令 1文件包含文件包含 include指令在編譯之前把指定文件包含到該命令所在位置指令在編譯之前把指定文件包含到該命令所在位置 # include 或或# include 文件名文件名 形式為:形式為:系統(tǒng)頭文件系統(tǒng)頭文件 預(yù)預(yù)處理指令處理指令 1文件包含文件包含 include指令在編譯之前把指定文件包含到該命令所在位置指令在編譯之前把指定文件包含到該命令所在位置 # include 或或# include 文件名文件名 形式為:形式為:自定義頭文件自定義頭文件 預(yù)預(yù)處理指令處理指令 2條件編譯條件編譯 形式形式1# if 常量表達(dá)式常量表達(dá)式程序段程序段# endif形式形式2# if 常量表達(dá)式常量表達(dá)式程序段程序段1# else程序段程序段2# endif形式形式3# if 常量表達(dá)式常量表達(dá)式1程序段程序段1 # elif 常量表達(dá)式常量表達(dá)式2程序段程序段2# elif 常量表達(dá)式常量表達(dá)式n程序段程序段n# else程序段程序段n+1# endif預(yù)預(yù)處理指令處理指令 3宏定義指令宏定義指令 用指定正文替

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論