引導語:類的轉換是計算機二級C++的一個考點,以下是本站小編分享給大家的2017計算機二級C++考點類的轉換,歡迎閱讀!
類的轉換
C++的.內部資料型別遵循隱式型別轉換規則。假設某個表達市中使用了一個短整型變數,而編譯器根據上下文認為這兒需要是的長整型,則編譯器就會根據型別轉換規則自動把它轉換成長整型,這種隱式轉換出現在賦值、引數傳遞、返回值、初始化和表示式中。我們也可以為類提供相應的轉換規則。
對一個類建立隱式轉換規則需要構造一個轉換函式,該函式作為類的成員,可以把該類的物件和其他資料型別的物件進行相互轉換。聲明瞭轉換函式,就告訴了編譯器,當根據句法判定需要型別轉換時,就呼叫函式。
有兩種轉換函式。一種是轉換建構函式;另一種是成員轉換函式。需要採用哪種轉換函式取決於轉換的方向。
轉換建構函式
當一個建構函式僅有一個引數,且該引數是不同於該類的一個數據型別,這樣的建構函式就叫轉換建構函式。轉換建構函式把別的資料型別的物件轉換為該類的一個物件。和其他建構函式一樣,如果宣告類的物件的初始化表同轉換建構函式的引數表相匹配,該函式就會被呼叫。當在需要使用該類的地方使用了別的資料型別,便宜器就會呼叫轉換建構函式進行轉換。
#include iostream.h
#include time.h
#include stdio.h
class Date
{
int mo, da, yr;
public:
Date(time_t);
void display();
};
void Date::display()
{
char year[5];
if(yr<10)
sprintf(year,0%d,yr);
else
sprintf(year,%d,yr);
cout< }
Date::Date(time_t now)
{
tm* tim=localtime(&now);
da=tim->tm_mday;
mo=tim->tm_mon+1;
yr=tim->tm_year;
if(yr>=100) yr-=100;
}
int main()
{
time_t now=time(0);
Date dt(now);
lay();
return 0;
}
本程式先呼叫time()函式來獲取當前時間,並把它賦給time_t物件;然後程式通過呼叫Date類的轉換建構函式來建立一個Date物件,該物件由time_t物件轉換而來。time_t物件先傳遞給localtime()函式,然後返回一個指向tm結構(time.h檔案中宣告)的指標,然後建構函式把結構中的日月年的數值拷貝給Date物件的資料成員,這就完成了從time_t物件到Date物件的轉換。