VC中靜態變量Static


vc中沒有強制的數據類型間轉換,java和C都有的:

例如:vc中:

                 int a=0xfffe;    //即65534
                 char b=a;        編譯不出錯

                 str.Format("%d",b);
      MessageBox(str);   //結果為-2

java中:

       int a=0xfffe;    //即65534
                  byte b=a;      編譯出錯,需要改成byte b=(byte)a


  靜態變量(static).靜態變量之所以是因為靜態,是因為他在整個程序生命周期的地址靜止不變。也就是說在整個程序里面只保存有一份拷貝。static關鍵字允許它在不同的函數調用間保持它的值。如果一個靜態變量被訪問后值改變,它就會保持新的值。如果這變量再次被訪問,它將會維持最新的值
class Test1{
public:
       static  int a;
       const int b;
       Test1():b(10){  

       }

void print1(){
               a++;
               printf("%d,%d\n",a,b);
       }
};

int Test1::a=10;

void main(){

       Test1 t1;
       t1.print1();

       Test1 t2;
       t2.print1();

       Test1 t3;
       t3.print1();
}

結果:11    12     13

在c++中,static靜態成員變量不能在類內部初始化。int Test1::a=10;
在c++中,const常量成員變量也不能在類定義處初始化,只能通過構造函數初始化列表進行,並且必須有構造函數。在構造函數中初始化都不行

 

C++中常見的關鍵字含義:

1. inline:定義內聯函數,該關鍵字是基於定義,如果只在函數聲明時給出inline,則函數不會被認為是內聯函數,所以必須在函數定義的地方也加上inline,同時inline只是向編譯器建議函數以內聯函數處理,不是強制的。

2. const:定義常成員,包括const數據成員和const成員函數,const數據成員必須,也只能通過構造函數的初始化列表進行初始化,const成員函數只能訪問類的成員,不能進行修改,如果需要修改,則引入下面的mutable關鍵字。

3.mutable:這個關鍵字的引入是解決const成員函數要修改成員變量,通常而言,const成員函數只能訪問成員變量,不能修改,但是如果成員變量被mutable修飾了,則在const成員函數中可以修改該變量。mutable和const不能同時用於修飾成員變量。

4. static:聲明靜態成員,包括靜態數據成員和靜態成員函數,它們被類的所有對象共享,靜態數據成員在使用前必須初始化,而靜態成員函數只能訪問靜態數據成員,不能訪問非靜態數據成員,因為該函數不含有this指針。

5. virtual:聲明虛函數,用於實現多態,該關鍵字是基於聲明的。

6. friend:聲明友元函數和友元類,該關鍵字也是基於聲明的。

7. volatile:被該關鍵字修飾的變量是指其值可能在編譯器認識的范圍外被修改,因此編譯器不要對該變量進行的操作進行優化。可以與const同時修飾一個變量。

 

為什么需要const成員函數?

  我們定義的類的成員函數中,常常有一些成員函數不改變類的數據成員(普通成員),,對常對象和常量進行訪問。也就是說,這些函數是"只讀"函數,而有一些函數要修改類數據成員的值。如果把不改變數據成員的函數都加上const關鍵字進行標識,顯然,可提高程序的可讀性。其實,它還能提高程序的可靠性,已定義成const的成員函數,一旦企圖修改數據成員的值,則編譯器按錯誤處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM