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的成員函數,一旦企圖修改數據成員的值,則編譯器按錯誤處理。