幾個問題作為開端:如果在編寫**的時候,如果將乙個基本型別轉換為乙個類物件?反過來,如何將乙個類物件轉換成乙個基本的資料型別?什麼是隱式型別轉換?什麼是顯式型別轉換?讀完這邊文章,你可以清楚的了解在編寫c++**過程中的這些問題。
q1:隱式型別轉換
a1: 在程式設計師完全不知情的情況下,編譯器按照自己認為正確的方式自動幫程式設計師完成轉換。
下面是具體說明:
int poppins;//定義乙個整型變數
double p_wt = poppins;//把整型變數賦值給乙個double型變數。
string str = 「adfsfafa」;//這裡,右邊是乙個char*型別指標,編譯器將隱式轉換成string物件。
但是我們知道,int型別的變數跟double型別的變數在記憶體中的儲存方式是不一樣的(這裡不做詳細介紹),這種情況下,編譯器會給出乙個警告,然後隱式轉換把poppins的值轉換成double型的值,賦給p_wt。
注意,有些基本變數之間能夠隱式轉換,而有些變數如果想嘗試隱式轉換,編譯器將會報錯。如:int* p_int = 10; 指標和整型不能實現隱式轉換。
q2:顯示型別轉換
a2:程式設計師自己想通過c++提供的方式來轉換自己想要的型別。
下面是詳細的具體說明:
first:
通過c++提供的關鍵字進行轉換,格式:keyword(type1):
· static_cast(type1): 將type1強制轉換成type2,條件是type1跟type2必須是具有某種關係,如繼承關係等。
· const_cast(type1):接觸type1的const屬性,並轉換成type2的型別。
· reinterpret_cast(type1):將指標型別type1轉化成type2指標型別。如:cptr = reinterpret_cast(ptr);//cptr是char型指標,ptr是int型指標。
· dynamic_cast(type1):執行時檢查,將基類type1的指標轉換成派生類type2的指標,如果type2和type1沒有繼承關係,將返回null指標。
如:dynamic_cast<&annial>(&dog)//if class dog is inherif from annial,it will convert the point of dog to annial point, and return the annial point; or it will return null point.
second:
如果不使用強制型別轉換關鍵字,可以使用(type1)type2的方式進行強制轉換
如:(int)d_volume;// d_volume是乙個double型別變數,將double變數轉換成int型別變數。
q1和q2討論的是基本資料型別之間,類物件之間的型別轉換以及基本資料型別向類物件之間的轉換,下面講的將是如何實現類向基本型別之間的轉換。
q3: 類物件轉換成基本資料型別
a3:在這裡先介紹一下轉換函式的概念:轉換函式是一種特殊的c++操作符函式,格式為: operator typename();
如果類定義中定義了轉換函式,那麼就可以利用轉換函式將乙個類物件轉換成基本資料型別。
下面進行詳細的描述:
其實轉換函式是乙個基本的成員函式,只是定義稍微有點特殊:
operator double ()const
這裡注意,沒有返回值,沒有引數
long gone = (double)poppin;//poppin是乙個類物件,通過double轉換函式,就轉換成了double型別,然後再轉化成long型別。
對比一下在c語言中有關型別轉換的知識點:
在c語言程式設計中,有很多情況是編譯器會幫你預設型別提公升的,如:short int, char, 和列舉型別資料在計算的過程中會被自動提公升為int型別,float型別會被自動提公升為double型別。
例子1: printf("%d ", sizeof 'a');//在這裡列印的並不是1,而是4,在有關char計算的過程中,一般都是先轉化成int型計算,然後再轉化成char型別
float fa, fb, result;
result = fa + fb;//這裡也是想把fa,fb轉化成double計算,然後再裁剪成float,但是也有可能有些編譯器把他們直接當成float和char來計算,如果計算結果不溢位的話。
另外,在函式呼叫的時候,如果函式定義與函式呼叫的型別不一致,如果編譯器認為可以找到合適的原型,那麼也有可能發生型別轉換的可能,在被呼叫函式的內部,引數會被裁剪成原先宣告的大小。
總之,型別是否發生轉換,是跟上下文息息相關的,要根據上下文判斷。
c c 資料型別轉換
c c 資料型別轉換1 float,char,string,cstring unicode 統一碼 萬國碼 單一碼 是一種在計算機上使用的字元編碼。它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼,以滿足跨語言 跨平台進行文字轉換 處理的要求。1990年開始研發,1994年正式公布。隨著計算...
C C 資料型別轉換
在c c 中,整型 單精度 雙精度及字元型資料可以進行混合運算,即雙目運算子兩邊的運算元型別可以不同。當表示式中不同型別的資料進行運算時,會發生資料型別的轉換。c c 中有兩種型別轉換的方法 自動型別轉換和強制型別轉換。所謂自動型別轉換是指在不同型別資料進行混合運算時,系統會自動進行資料型別的轉換。...
C 資料型別轉換小結
剛接觸vc程式設計的朋友往往對許多資料型別的轉換感到迷惑不解,本文將介紹一些常用資料型別的使用。我們先定義一些常見型別變數藉以說明 int i 100 long l 2001 float f 300.2 double d 12345.119 char username 女俠程佩君 char temp...