流插入,流提取運算符重載和類型轉換的講解和執行個體
重載流插入和提取運算符的運算符函數,不能作為類的成員函數,隻能作為普通函數
流插入運算符”<<”和流提取運算符”>>”也可以被用來重載。
我們可以使用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的秒數
類型轉換函數在平時比較少見,在這裡隻介紹了一下如何使用的。
歡迎轉載,分享是進步的源泉。