C++第5章程序的結構PPT教學課件_第1頁
C++第5章程序的結構PPT教學課件_第2頁
C++第5章程序的結構PPT教學課件_第3頁
C++第5章程序的結構PPT教學課件_第4頁
C++第5章程序的結構PPT教學課件_第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、1q作用域:是標識符的有效范圍作用域:是標識符的有效范圍q可見性:標識符是否可以引用的問題可見性:標識符是否可以引用的問題標志符的作用域與可見性第2頁/共70頁第1頁/共70頁2幾種作用域幾種作用域q 函數原型參數的作用域q 塊作用閾q 類作用域q 文件作用域第3頁/共70頁第2頁/共70頁3函數原形參數的作用域函數原形參數的作用域函數原型中的參數的作用域始于函數原型中的參數的作用域始于(,結束于,結束于)。 double Area(double radius);radius radius 的作用域僅在于此,的作用域僅在于此,不能用于程序正文其它地方,不能用于程序正文其它地方,因而可有可無。因

2、而可有可無。第4頁/共70頁第3頁/共70頁4塊作用域塊作用域 在塊中聲明的標識符,其作用域自聲在塊中聲明的標識符,其作用域自聲明處起,限于塊中明處起,限于塊中, ,到本層塊尾結束。到本層塊尾結束。void fun(int a) int b(a); cinb; if (b0) int c; . c c的作用域的作用域b b的作用域的作用域第5頁/共70頁第4頁/共70頁5類作用域類作用域q可以將類看成是一組有名成員的集合可以將類看成是一組有名成員的集合q類類X X的成員的成員M M具有類作用域具有類作用域q對類對類X X的成員的成員M M的訪問方式如下:的訪問方式如下: 如果在如果在X的成員函

3、數中沒有聲明同名的局部的成員函數中沒有聲明同名的局部作用域標識符,那么作用域標識符,那么在該函數內在該函數內可以訪問成可以訪問成員員M;通過表達式通過表達式x.M或者或者x:M訪問;訪問;通過表達式通過表達式prt-M。第6頁/共70頁第5頁/共70頁6類作用域實例類作用域實例class Pointpublic:Point(int xx=0, int yy=0) X=xx; Y=yy; Point(Point &p);int GetX() return X;int GetY() return Y;void GetC() cout Object id=countPendl;private:int

4、 X,Y;/X/X和和Y Y具有類作用域具有類作用域;Point:Point(Point &p)X=p.X;Y=p.Y;第7頁/共70頁第6頁/共70頁7文件作用域文件作用域 不在前述各個作用域中出現的聲明,具有不在前述各個作用域中出現的聲明,具有文件作用域,這樣聲明的的變量稱為全局變量,文件作用域,這樣聲明的的變量稱為全局變量,其作用域開始于聲明點,結束于文件尾。其作用域開始于聲明點,結束于文件尾。i i具有文具有文件作用件作用域域第8頁/共70頁第7頁/共70頁8標志符的可見性標志符的可見性v程序運行到某一點,能夠引用的標識符,就是程序運行到某一點,能夠引用的標識符,就是該處可見的標識符。

5、該處可見的標識符。v可見性表示從內層作用域向外層作用域可見性表示從內層作用域向外層作用域“看看”時能看見什么。時能看見什么。v如果標識在某處可見,則就可以在該處引用此如果標識在某處可見,則就可以在該處引用此標識符。標識符。第9頁/共70頁第8頁/共70頁9標志符的可見性實例標志符的可見性實例#includeusing namespace std;int i; /文件作用域文件作用域void main(void) i=5; int j; /塊作用域塊作用域 j=7; couti=jendl; /輸出輸出7 couti=i; /輸出輸出5i在這個范圍可見j在這個范圍可見第10頁/共70頁第9頁/共

6、70頁10作用域可見性的一般規則作用域可見性的一般規則 標識符應聲明在先,引用在后。標識符應聲明在先,引用在后。 在不同的作用域內可以有同名的標志符。在不同的作用域內可以有同名的標志符。 如果某個標識符在外層中聲明,且在內層中沒如果某個標識符在外層中聲明,且在內層中沒有同一標識符的聲明,則該標識符在內層可見。有同一標識符的聲明,則該標識符在內層可見。 對于兩個嵌套的作用域,如果在內層作用域內對于兩個嵌套的作用域,如果在內層作用域內聲明了與外層作用域中同名的標識符,則外層聲明了與外層作用域中同名的標識符,則外層作用域的標識符在內層不可見,稱為被隱藏了。作用域的標識符在內層不可見,稱為被隱藏了。第

7、11頁/共70頁第10頁/共70頁11同一作用域中的標識符同一作用域中的標識符 對于變量,在同一作用域中,不能聲明同名的標志符。對于變量,在同一作用域中,不能聲明同名的標志符。第12頁/共70頁第11頁/共70頁12#includeusing namespace std;int i; /文件作用域文件作用域void main(void) i=5; int i; /塊作用域塊作用域 i=7; couti=iendl; /輸出輸出7 couti=i; /輸出輸出5變量隱藏變量隱藏的例子的例子塊作用域的塊作用域的i隱藏隱藏了文件作用域的了文件作用域的i第13頁/共70頁第12頁/共70頁13對象的生

8、存期對象的生存期q 對象從產生到結束的這段時間就是它對象從產生到結束的這段時間就是它的生存期。的生存期。q 在對象生存期內,對象將保持它的狀在對象生存期內,對象將保持它的狀態(即成員變量的值),直到被更新。態(即成員變量的值),直到被更新。q 同樣變量也有生存期。同樣變量也有生存期。第14頁/共70頁第13頁/共70頁14兩種生存期兩種生存期q 靜態生存期q 動態生存期第15頁/共70頁第14頁/共70頁15靜態生存期靜態生存期q這種生存期與程序的運行期相同。這種生存期與程序的運行期相同。q有兩種對象具有靜態生存期:有兩種對象具有靜態生存期:在文件作用域中聲明的對象;在文件作用域中聲明的對象;

9、在函數內部塊作用域內冠以關鍵字在函數內部塊作用域內冠以關鍵字static static 聲明的對象聲明的對象 。 例:例: static int i;第16頁/共70頁第15頁/共70頁16#includeusing namespace std;int i=5; /文件作用域文件作用域void main() couti=iendl;i具有靜態生存期具有靜態生存期靜態生存期例子靜態生存期例子第17頁/共70頁第16頁/共70頁17動態生存期動態生存期q塊作用域中聲明的,沒有用塊作用域中聲明的,沒有用staticstatic修飾修飾的對象是動態生存期的對象(習慣稱局的對象是動態生存期的對象(習慣稱

10、局部生存期對象)。部生存期對象)。q開始于程序執行到聲明點時,結束于命開始于程序執行到聲明點時,結束于命名該標識符的作用域結束處名該標識符的作用域結束處。第18頁/共70頁第17頁/共70頁18#includeusing namespace std;void fun();void main() fun(); fun();void fun() static int a=1; int i=5; a+; i+; couti=i,a=aendl;運行結果:運行結果:i=6i=6, , a=2 a=2i=6i=6, , a=3a=3i i是動態生存期是動態生存期a a是靜態生存期是靜態生存期生存期的例子

11、生存期的例子第19頁/共70頁第18頁/共70頁19變量的生存期與可見性變量的生存期與可見性#includeusing namespace std;int i=1; / i i 為全局變量,具有靜態生存期。為全局變量,具有靜態生存期。void main(void) static int a; / 靜態局部變量,有全局壽命,局部可靜態局部變量,有全局壽命,局部可見。見。 int b=-10; / b, cb, c為局部變量,具有動態生存期。為局部變量,具有動態生存期。 int c=0; void other(void); cout-MAIN-n; cout i: i a: a b: b c: c

12、endl; c=c+8; other(); cout-MAIN-n; cout i: i a: a b: b c: cendl; i=i+10; other(); 第20頁/共70頁第19頁/共70頁20void other(void) static int a=2; static int b; / a,ba,b為靜態局部變量,具有全局壽命,局部可見。為靜態局部變量,具有全局壽命,局部可見。 /只第一次進入函數時被初始化。只第一次進入函數時被初始化。 int c=10; / C C為局部變量,具有動態生存期,為局部變量,具有動態生存期, /每次進入函數時都初始化。每次進入函數時都初始化。 a=

13、a+2; i=i+32; c=c+5; cout-OTHER-n; cout i: i a: a b: b c: cendl; b=a;運行結果:運行結果:-MAIN-MAIN- i: 1 a: 0 b: -10 c: 0 i: 1 a: 0 b: -10 c: 0-OTHER-OTHER- i: 33 a: 4 b: 0 c: 15 i: 33 a: 4 b: 0 c: 15-MAIN-MAIN- i: 33 a: 0 b: -10 c: 8 i: 33 a: 0 b: -10 c: 8-OTHER-OTHER- i: 75 a: 6 b: 4 c: 15 i: 75 a: 6 b: 4 c

14、: 15第21頁/共70頁第20頁/共70頁21具有靜態、動態生存期對象的時鐘程具有靜態、動態生存期對象的時鐘程序序#includeusing namespace std;class Clock/時鐘類聲明時鐘類聲明public:/外部接口外部接口Clock();void SetTime(int NewH, int NewM, int NewS); / /三個形參均具有函數原型作用域三個形參均具有函數原型作用域void ShowTime();Clock()private:/私有數據成員私有數據成員int Hour,Minute,Second;第22頁/共70頁第21頁/共70頁22/時鐘類成員

15、函數實現時鐘類成員函數實現Clock:Clock() /構造函數構造函數Hour=0;Minute=0;Second=0;void Clock:SetTime(int NewH, int NewM, int NewS)Hour=NewH;Minute=NewM;Second=NewS;void Clock:ShowTime()coutHour:Minute:Secondendl;第23頁/共70頁第22頁/共70頁23Clock globClock; /聲明對象聲明對象globClockglobClock,具有靜態生存期,文,具有靜態生存期,文件作用域件作用域void main()/主函數主函

16、數coutFirst time output:endl;/引用具有文件作用域的對象:引用具有文件作用域的對象: globClock.ShowTime(); /對象的成員函數具有類作用域對象的成員函數具有類作用域globClock.SetTime(8,30,30);Clock myClock(globClock); / /聲明具有塊作用域的對象聲明具有塊作用域的對象myClockmyClockcoutSecond time output:endl;myClock.ShowTime();/引用具有塊作用域的對象引用具有塊作用域的對象程序的運行結果為:程序的運行結果為:First time outp

17、ut:First time output:0:0:00:0:0Second time output:Second time output:8:30:308:30:30第24頁/共70頁第23頁/共70頁24類的靜態成員類的靜態成員q靜態成員變量靜態成員變量q靜態成員函數靜態成員函數第25頁/共70頁第24頁/共70頁25非靜態數據成員(實例屬性)非靜態數據成員(實例屬性)q類中不帶類中不帶staticstatic關鍵字修飾的成員關鍵字修飾的成員; ;q在該類的每個對象的內存中都有實例成員在該類的每個對象的內存中都有實例成員的一份拷貝的一份拷貝, ,而且都有自己的值。而且都有自己的值。 clas

18、s employee private: int EmpNo; int ID; 第26頁/共70頁第25頁/共70頁26靜態數據成員(類屬性)靜態數據成員(類屬性)q類中聲明的帶類中聲明的帶staticstatic關鍵字修飾的成員關鍵字修飾的成員; ;q在該類的每個對象的內存中沒有類屬性的在該類的每個對象的內存中沒有類屬性的拷貝拷貝, ,而是共享一份;而是共享一份;q必須在類外定義和初始化,用必須在類外定義和初始化,用(:)(:)來指明來指明所屬的類。所屬的類。第27頁/共70頁第26頁/共70頁27靜態數據成員的作用靜態數據成員的作用q全局對象可以實現所有對象共享數據,但全局對象可以實現所有對

19、象共享數據,但是不安全;是不安全;q使用類中的靜態數據成員使用類中的靜態數據成員實現所有對象實現所有對象安全地共享數據。安全地共享數據。 第28頁/共70頁第27頁/共70頁28class employee private: int EmpNo; int ID; static int countE;/靜態數據成員,用于記錄職工總數靜態數據成員,用于記錄職工總數 第29頁/共70頁第28頁/共70頁29具有靜態數據成員的具有靜態數據成員的 PointPoint類類#include using namespace std;class Pointpublic:Point(int xx=0, int

20、yy=0) X=xx; Y=yy; countP+; Point(Point &p);int GetX() return X;int GetY() return Y;void GetC() cout Object id=countPendl;private:int X,Y;static int countP;/類屬性類屬性, ,可用于記錄程序中的可用于記錄程序中的總點數總點數;第30頁/共70頁第29頁/共70頁30Point:Point(Point &p)X=p.X;Y=p.Y;countP+;int Point:countP=0; /類屬性必須這樣初始化類屬性必須這樣初始化void mai

21、n()Point A(4,5); /分配空間分配空間coutPoint A,A.GetX(),A.GetY();A.GetC();Point B(A);/分配空間分配空間coutPoint B,B.GetX(),B.GetY();B.GetC();第31頁/共70頁第30頁/共70頁31靜態成員函數靜態成員函數q類中使用類中使用staticstatic關鍵字聲明的函數成員;關鍵字聲明的函數成員;q靜態成員函數也屬于整個類,由同一個類的所靜態成員函數也屬于整個類,由同一個類的所有對象共同擁有,為這些對象所共享;有對象共同擁有,為這些對象所共享;q一般情況下,靜態成員函數主要用來訪問同一一般情況下

22、,靜態成員函數主要用來訪問同一個類中的靜態成員數據,維護對象之間共享的個類中的靜態成員數據,維護對象之間共享的數據。數據。q 類外代碼可以使用類名和作用域操作符來調類外代碼可以使用類名和作用域操作符來調用靜態成員函數。用靜態成員函數。q靜態成員函數只能引用屬于該類的靜態數據成靜態成員函數只能引用屬于該類的靜態數據成員或靜態成員函數。員或靜態成員函數。第32頁/共70頁第31頁/共70頁32void main() Point:GetC()Point:GetC(); ;/當當GetCGetC是靜態成員函數時才可以是靜態成員函數時才可以 Point A(4,5); /分配空間分配空間coutPoin

23、t A,A.GetX(),A.GetY();A.GetC();Point B(A);/分配空間分配空間coutPoint B,B.GetX(),B.GetY();B.GetC();第33頁/共70頁第32頁/共70頁33靜態成員函數例靜態成員函數例1 1#includeusing namespace std;class Application public: static void f(); static void g(); private: static int global;int Application:global=0;void Application:f() global=5;voi

24、d Application:g() coutglobalendl;void main() Application:f(); Application:g();第34頁/共70頁第33頁/共70頁34靜態成員函數例靜態成員函數例2class A public: static void f(A a); private: int x;void A:f(A a) coutx; /對對x x的引用是錯誤的的引用是錯誤的 couta.x; /正確正確第35頁/共70頁第34頁/共70頁35具有靜態數據、函數成員的具有靜態數據、函數成員的 PointPoint類類#include using namespac

25、e std;class Point/Point類聲明類聲明public:/外部接口外部接口Point(int xx=0, int yy=0) X=xx;Y=yy;countP+;Point(Point &p); /拷貝構造函數拷貝構造函數int GetX() return X;int GetY() return Y;static void GetC()/內聯靜態成員函數內聯靜態成員函數 cout Object id=countPendl;private:/私有數據成員私有數據成員int X,Y;static int countP;/靜態成員數據靜態成員數據第36頁/共70頁第35頁/共70頁3

26、6Point:Point(Point &p)X=p.X;Y=p.Y;countP+;int Point:countP=0;void main()/主函數實現主函數實現Point A(4,5);/聲明對象聲明對象AcoutPoint A,A.GetX(),A.GetY();A.GetC();/輸出對象號,對象名引用輸出對象號,對象名引用Point B(A);/聲明對象聲明對象BcoutPoint B,B.GetX(),B.GetY();Point:GetC();/輸出對象號,類名引用輸出對象號,類名引用第37頁/共70頁第36頁/共70頁37友元(作一個了解)友元(作一個了解)q友元是友元是C+

27、C+提供的一種突破數據封裝和提供的一種突破數據封裝和數據隱藏的機制。數據隱藏的機制。q通過將一個模塊聲明為另一個模塊的友通過將一個模塊聲明為另一個模塊的友元,一個模塊能夠引用到另一個模塊中元,一個模塊能夠引用到另一個模塊中本是被隱藏的信息。本是被隱藏的信息。q可以使用友元函數和友元類。可以使用友元函數和友元類。q為了確保數據的完整性,及數據封裝與為了確保數據的完整性,及數據封裝與隱藏的原則,建議盡量不使用或少使用隱藏的原則,建議盡量不使用或少使用友元。友元。第38頁/共70頁第37頁/共70頁38友元函數友元函數q友元函數是在類聲明中由關鍵字友元函數是在類聲明中由關鍵字friendfriend

28、修飾說明的非成員函數,在它的函數體修飾說明的非成員函數,在它的函數體中能夠通過對象名訪問中能夠通過對象名訪問 private private 和和 protectedprotected成員成員q作用:增加靈活性,使程序員可以在封作用:增加靈活性,使程序員可以在封裝和快速性方面做合理選擇。裝和快速性方面做合理選擇。q訪問對象中的成員必須通過對象名訪問對象中的成員必須通過對象名。第39頁/共70頁第38頁/共70頁39普通函數作為友元函數計算兩點距普通函數作為友元函數計算兩點距離離#include #include using namespace std;class Point/Point類聲明類

29、聲明 public:/外部接口外部接口Point(int xx=0, int yy=0) X=xx;Y=yy;int GetX() return X;int GetY() return Y;friend float Distance(Point &a, Point &b); private:/私有數據成員私有數據成員int X,Y;第40頁/共70頁第39頁/共70頁40double Distance( Point& a, Point& b) double dx=a.X-b.X;/友元函數中可使用對象的私有成友元函數中可使用對象的私有成員員 double dy=a.Y-b.Y; return

30、sqrt(dx*dx+dy*dy);void main() Point p1(3.0, 5.0), p2(4.0, 6.0); double d=Distance(p1, p2);/友元函數的調用友元函數的調用 coutThe distance is dendl;第41頁/共70頁第40頁/共70頁41友元成員函數友元成員函數q 一個類的成員函數可以說明為另一個類一個類的成員函數可以說明為另一個類的友元,以便通過該成員函數訪問另一個的友元,以便通過該成員函數訪問另一個類中的成員。類中的成員。q其用法與一般友元函數相同,只是要通過其用法與一般友元函數相同,只是要通過類或對象名來引用。類或對象名來

31、引用。第42頁/共70頁第41頁/共70頁42友元類友元類q若一個類為另一個類的友元,則此類的若一個類為另一個類的友元,則此類的所有成員都能訪問對方類的私有成員。所有成員都能訪問對方類的私有成員。q聲明語法:將友元類名在另一個類中使聲明語法:將友元類名在另一個類中使用用friendfriend修飾說明。修飾說明。第43頁/共70頁第42頁/共70頁43友元類舉例友元類舉例class A friend class B; public: void Display() coutxendl; private: int x;class B public: void Set(int i); void Di

32、splay(); private: A a;第44頁/共70頁第43頁/共70頁44void B:Set(int i) a.x=i;/訪問了訪問了A A類對象類對象a a的私有成員的私有成員x xvoid B:Display() a.Display();第45頁/共70頁第44頁/共70頁45注意事項:注意事項:q第一:友元關系是不能傳遞的。第一:友元關系是不能傳遞的。 如:如:B B類是類是A A類的友元,類的友元,C C類是類是B B類的友元,但是類的友元,但是C C類與類與A A類沒有友元關系類沒有友元關系q第二:友元關系是單向的。第二:友元關系是單向的。 如:如:B B類是類是A A類

33、的友員類的友員- -B B類的成員可以訪問類的成員可以訪問A A類的所類的所有成員;但有成員;但A A類不能類不能第46頁/共70頁第45頁/共70頁46q數據隱藏保證了數據的安全性,但數據共享卻破壞了數據的安全性。q解決辦法就是將既需要共享、又需要防止改變的數據聲明為常量。q常量必須進行初始化,而且一旦初始化就不能被更新。共享數據的保護共享數據的保護第47頁/共70頁第46頁/共70頁47 q常引用:被引用的對象不能被更新。常引用:被引用的對象不能被更新。const 類型說明符類型說明符 &引用名引用名q常對象:必須進行初始化常對象:必須進行初始化, ,不能被更新。不能被更新。類名類名 co

34、nst 對象名對象名q常數組:數組元素不能被更新常數組:數組元素不能被更新( (下一章下一章介紹介紹) )。類型說明符類型說明符 const 數組名數組名大小大小.q常指針:指向常量的指針常指針:指向常量的指針( (將在下一章將在下一章介紹介紹) )。常見的常量常見的常量第48頁/共70頁第47頁/共70頁48常引用做形式參數常引用做形式參數#includeusing namespace std;void display(constconst double& r);void main() double d(9.5); display(d);void display(const double&

35、r)/常引用做形參,在函數中不能更新常引用做形參,在函數中不能更新 r r所引用的對象。所引用的對象。/因此雖然函數中用到了實參所引用的對象,但不會破因此雖然函數中用到了實參所引用的對象,但不會破壞它壞它 coutrendl; 第49頁/共70頁第48頁/共70頁49常對象常對象class A public: A(int i,int j) x=i; y=j; . private: int x,y;A const a(3,4); /a /a是常對象,不能被是常對象,不能被更新更新必須進行初始化,一旦初始化后不能被更新必須進行初始化,一旦初始化后不能被更新的對象的對象第50頁/共70頁第49頁/共

36、70頁50用用constconst修飾的常成員修飾的常成員q常成員函數常成員函數q常數據成員常數據成員第51頁/共70頁第50頁/共70頁51q使用使用constconst關鍵字說明的函數。關鍵字說明的函數。q常成員函數不更新對象的數據成員。常成員函數不更新對象的數據成員。q常成員函數說明格式:常成員函數說明格式:類型說明符類型說明符 函數名(參數表)函數名(參數表)constconst; ;qconstconst關鍵字可以被用于參與關鍵字可以被用于參與對重載函數對重載函數的的區分區分通過常對象只能調用它的常成員函數。通過常對象只能調用它的常成員函數。常成員函數常成員函數第52頁/共70頁第5

37、1頁/共70頁52常成員函數舉例常成員函數舉例#includeusing namespace std;class R public: R(int r1, int r2)R1=r1;R2=r2; void print(); void print() const; private: int R1,R2;第53頁/共70頁第52頁/共70頁53void R:print() coutR1:R2endl;void R:print() const coutR1;R2endl;void main() R a(5,4); a.print(); /調用調用void print() const R b(20,52

38、); b.print(); / /調用調用void print() constvoid print() const,因為通過,因為通過常常 /對象只能調用它的常成員函數。對象只能調用它的常成員函數。互相重載第54頁/共70頁第53頁/共70頁54q 使用使用constconst說明的數據成員。說明的數據成員。q 任何函數均不能對其賦值改變,只能通過初任何函數均不能對其賦值改變,只能通過初始化賦值。始化賦值。q構造函數對該數據成員進行初始化,只能夠通構造函數對該數據成員進行初始化,只能夠通過初始化表。過初始化表。常數據成員常數據成員第55頁/共70頁第54頁/共70頁55常數據成員舉例常數據成員

39、舉例#includeusing namespace std;class Apublic:A(int i);void print();const int& r; /常引用成員常引用成員private:const int a; /常數據成員常數據成員static const int b; /靜態常數據成員靜態常數據成員;第56頁/共70頁第55頁/共70頁56const int A:b=10; /靜態常數據成員在類外說明和初始化靜態常數據成員在類外說明和初始化A:A(int i):a(i),r(a) /而常數據成員只能通過初始化列表來而常數據成員只能通過初始化列表來 /獲得初值獲得初值void A

40、:print() couta:b:rendl; void main() A a1(100),a2(0); a1.print(); a2.print();建立對象建立對象a1a1和和a2a2,并以,并以100100和和0 0作為初值,作為初值,分別調用構造函數,通過構造函數的初始分別調用構造函數,通過構造函數的初始化列表給對象的常數據成員化列表給對象的常數據成員a a和和r r賦初值賦初值第57頁/共70頁第56頁/共70頁57多文件結構和編譯預處理命令q 多文件結構多文件結構q 編譯預處理命令編譯預處理命令q利用工程來組合各個文件利用工程來組合各個文件第58頁/共70頁第57頁/共70頁58多

41、文件結構q前面的例程都很小前面的例程都很小, ,因此把類聲明、類實因此把類聲明、類實現類的使用的代碼都寫在一個源程序中。現類的使用的代碼都寫在一個源程序中。q在實際的工程項目中,往往把一個源程在實際的工程項目中,往往把一個源程序可以劃分為多個源文件:序可以劃分為多個源文件:類聲明文件(類聲明文件(.h文件)文件)類實現文件(類實現文件(.cpp文件)文件)類的使用文件(類的使用文件(main()所在的所在的.cpp文件文件)第59頁/共70頁第58頁/共70頁59外部變量與外部函數q外部變量外部變量 為了使變量除了在定義它的源文件中中可以使用,還為了使變量除了在定義它的源文件中中可以使用,還可

42、以被其他文件使用,可將其聲明為外部變量,用可以被其他文件使用,可將其聲明為外部變量,用externextern關鍵字;關鍵字;q外部函數外部函數一般非成員函數均是外部函數,不管有沒有一般非成員函數均是外部函數,不管有沒有externextern來修飾;在其來修飾;在其他單元先聲明后調用即可他單元先聲明后調用即可用用staticstatic修飾的函數原型或函數定義不能成為外部函數。修飾的函數原型或函數定義不能成為外部函數。第60頁/共70頁第59頁/共70頁60標準C+庫qVC+4.1VC+4.1以前的版本,類庫頭文件都是以前的版本,類庫頭文件都是“* *.h.h”qVC+4.2VC+4.2以前的版本,類庫頭文件再沒有以前的版本,類庫頭文件再沒有h h擴展擴展名名q兩者不可混用兩者不可混用第61頁/共70頁第60

溫馨提示

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

評論

0/150

提交評論