天天看點

【C++】流插入、提取運算符和類型轉換流插入,流提取運算符重載類型轉換源代碼下載下傳位址:

流插入,流提取運算符重載和類型轉換的講解和執行個體

重載流插入和提取運算符的運算符函數,不能作為類的成員函數,隻能作為普通函數

流插入運算符”<<”和流提取運算符”>>”也可以被用來重載。

我們可以使用cout對一個int,string等等類型的資料進行輸出,我們卻不可以對我們自己定義的一個類的對象進行直接輸出,因為我們這個類是沒有”<<”運算符的。

“<<”運算符是有兩個操作數的,它是一個雙目運算符,平時貌似隻給了它一個操作數,形如cout<

重載流插入和提取運算符的運算符函數,不能作為類的成員函數,隻能作為普通函數 這是一個規定,沒有為什麼

“<<”和”>>”重載的函數聲明如下:

istream和ostream分别是輸入流類和輸出流類。cin和cout就分别是istream和ostream的對象。

注意:

**重載”<<”流插入運算符的函數第一個參數和傳回類型必須是ostream&類型。

重載”>>”流提取運算符的函數第一個參數和傳回類型必須是istream&類型。**

第二個參數是使用者自定義的類

在重載完流插入和提取運算符後,我們就可以對該類使用<<輸出資料,使用>>輸入資料。這樣是非常直覺的。

在為CTime類重載+運算符後,我們就可以對兩個CTime對象使用+運算符進行操作。

但仍然不能使用+運算符将一個CTime對象和一個int類型相加。為了實作它,我們可以先将int類型轉換為一個CTime的臨時對象,然後在進行相加。

如下: <code>time + CTime(3)</code>

CTime(3)這種形式很類似于強制類型轉換,将int類型轉換為CTime類型。之是以可以進行此種轉換,是因為已經為CTime對象定義了具有一個int類型參數的構造函數。是以具有一個參數的構造函數可以用來做類型轉換,稱之為轉換構造函數

有了類型轉換函數,在需要CTime類型參數的地方可以使用int類型代替

如果我們期望避免這種轉換,我們可以在含有一個參數的構造函數前面加上聲明explicit

如:

這樣,我們使用前面的func(10),CTime time4 = 20;的時候,編譯器就會報錯

類型轉換函數用以将類的對象轉換另一種資料類型的函數。

類型轉換函數沒有參數,沒有傳回類型。它是成員函數。

如 可以将CTime類對象轉換int類型。

類型轉換函數的聲明形式:

下面定義一個類型轉換函數:

最後面的那行輸出 6:3:3的秒數

類型轉換函數在平時比較少見,在這裡隻介紹了一下如何使用的。

歡迎轉載,分享是進步的源泉。

繼續閱讀