對象的生存期

對象的生存期ios

 

    ·概念:對象從產生到結束的這段時間就是它的生存期。在對象生存期內對象將保持它的值,直到被更新爲止。對象的生存期能夠分爲靜態生存期和動態生存期兩種函數

 

 1、  靜態生存期spa

 

·概念:若是對象的生存期與程序的運行期相同,則稱它具備靜態生存期。code

 

  1.  這種生存期與程序的運行期相同。在文件做用域中生命的對象具備這種生存期。在函數內部聲明靜態生存期對象,要冠以關鍵字static對象

 

  2.  寫法:blog

      static int i;遞歸

      注:此時定義的變量i即是具備靜態生存期的變量,也稱爲靜態變量。作用域

   也可賦初值:io

         static int i = 5;class

   3.   

    ①  靜態變量的特色:

 

      它不會隨着每次函數調用而產生一個副本,也不會隨着函數返回而失效。即便發生了遞歸調用,第n次調用函數時,靜態變量的值爲第n-1次調用靜態變量的值。(也就是說:靜態變量第一次賦值有效,也只能賦值一次。)

 

    ②  定義時未指定初值的基本類型靜態生存期變量,會被賦予0值初始化,而對於動態生存期變量,不指定初值意味着初值不肯定。

 

    ③  全局變量爲靜態變量,局部變量通常爲動態的。

 

    ④  類的對象成員也有各自的生存期,不用static修飾的成員對象,其生存期與它們所屬對象的生存期保持一致。

 

  代碼:

    

 1 #include <iostream>
 2 using namespace std;
 3  
 4 int i = 1;            //i爲全局變量,具備靜態生存期
 5 int main()
 6 {
 7     static int a;    //a爲靜態局部變量,具備全局壽命,局部可見
 8     int b = -10;        //b,c爲局部變量,具備動態生存期
 9     int c = 0;
10  
11     void other(void);
12  
13     cout << "-----MAIN------" << endl;
14     cout << "i=" << i << "  a=" << a << "   b=" << b << "   c=" << c << endl;
15  
16     c = c + 8;
17     other();
18     cout << "-----MAIN-------" << endl;
19     cout << "i=" << i << "  a=" << a << "   b=" << b << "   c=" << c << endl;
20  
21     i = i + 10;
22     other();
23     return 0;
24  
25 }
26  
27 void other(void)
28 {
29     //a,b爲靜態局部變量,具備全局壽命,局部可見,只第一次進入函數是被初始化
30     static int a = 2;
31     static int b;
32  
33     int c = 10;
34     a = a + 2;
35     i = i + 32;
36     c = c + 5;
37  
38     cout << "-----OTHER-----" << endl;
39     cout << "i=" << i << "  a=" << a << "   b=" << b << "   c=" << c << endl;
40     b = a;
41  
42 }

  運行結果:

 

 

2、  動態生存期  

 

  ·概念:塊做用域中生命的,沒有用static修飾的對象是動態生存期的對象。(習慣稱爲局部生存期對象)

 

    1. 誕生於聲明點,結束於命名該標識符的做用域結束處。(聲明所在的塊執行完畢之時)

    

    2. 具備靜態、動態生存期對象的時鐘程序:

 

 1 #include <iostream>
 2  
 3 using namespace std;
 4  
 5 class Clock
 6 {
 7 public:
 8     Clock();
 9     void SetTime(int NewN, int NewM, int NewS);
10     void ShowTime();
11     ~Clock() {}
12 private:
13     int Hour, Minute, Second;
14 };
15  
16 Clock::Clock()
17 {
18  
19 }
20  
21 void Clock::SetTime(int NewN, int NewM, int NewS)
22 {
23     Hour = NewN;
24     Minute = NewM;
25     Second = NewS;
26 }
27  
28 void Clock::ShowTime()
29 {
30     cout << Hour << ":" << Minute << ":" << Second << endl;
31 }
32  
33 Clock globClock;
34  
35 int main(int argc, char* argv[])
36 {
37  
38     cout << "First Time Output:" << endl;
39  
40     globClock.ShowTime();
41     globClock.SetTime(8, 10, 15);
42     Clock myClock(globClock);
43  
44     cout << "Second Time Output:" << endl;
45     myClock.ShowTime();
46     return 0;
47 }

  運行結果:

 

  注:就生存期而言,除了具備命名空間做用域的對象globGlock具備靜態生存期,與程序的運行期相同以外,其他都具備動態生存期。

相關文章
相關標籤/搜索