2017年計算機二級C++復(fù)習(xí)資料:C++類的轉(zhuǎn)換

字號:

C++的內(nèi)部數(shù)據(jù)類型遵循隱式類型轉(zhuǎn)換規(guī)則,假設(shè)某個表達市中使用了一個短整型變量,而編譯器根據(jù)上下文認為這兒需要是的長整型...詳情請看C++類的轉(zhuǎn)換信息:
    C++的內(nèi)部數(shù)據(jù)類型遵循隱式類型轉(zhuǎn)換規(guī)則。假設(shè)某個表達市中使用了一個短整型變量,而編譯器根據(jù)上下文認為這兒需要是的長整型,則編譯器就會根據(jù)類型轉(zhuǎn)換規(guī)則自動把它轉(zhuǎn)換成長整型,這種隱式轉(zhuǎn)換出現(xiàn)在賦值、參數(shù)傳遞、返回值、初始化和表達式中。我們也可以為類提供相應(yīng)的轉(zhuǎn)換規(guī)則。
    一、轉(zhuǎn)換構(gòu)造函數(shù)
    當(dāng)一個構(gòu)造函數(shù)僅有一個參數(shù),且該參數(shù)是不同于該類的一個數(shù)據(jù)類型,這樣的構(gòu)造函數(shù)就叫轉(zhuǎn)換構(gòu)造函數(shù)。轉(zhuǎn)換構(gòu)造函數(shù)把別的數(shù)據(jù)類型的對象轉(zhuǎn)換為該類的一個對象。和其他構(gòu)造函數(shù)一樣,如果聲明類的對象的初始化表同轉(zhuǎn)換構(gòu)造函數(shù)的參數(shù)表相匹配,該函數(shù)就會被調(diào)用。當(dāng)在需要使用該類的地方使用了別的數(shù)據(jù)類型,便宜器就會調(diào)用轉(zhuǎn)換構(gòu)造函數(shù)進行轉(zhuǎn)換。
    #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);
    dt.display();
    return 0;
    }
    本程序先調(diào)用time()函數(shù)來獲取當(dāng)前時間,并把它賦給time_t對象;然后程序通過調(diào)用Date類的轉(zhuǎn)換構(gòu)造函數(shù)來創(chuàng)建一個Date對象,該對象由time_t對象轉(zhuǎn)換而來。time_t對象先傳遞給localtime()函數(shù),然后返回一個指向tm結(jié)構(gòu)(time.h文件中聲明)的指針,然后構(gòu)造函數(shù)把結(jié)構(gòu)中的日月年的數(shù)值拷貝給Date對象的數(shù)據(jù)成員,這就完成了從time_t對象到Date對象的轉(zhuǎn)換。