流插入,流提取運算子過載和型別轉換的講解和例項
過載流插入和提取運算子的運算子函式,不能作為類的成員函式,只能作為普通函式
流插入運算子」<>」也可以被用來過載。
我們可以使用cout對乙個int,string等等型別的資料進行輸出,我們卻不可以對我們自己定義的乙個類的物件進行直接輸出,因為我們這個類是沒有」<
「<
cout<
cin>>time;
過載流插入和提取運算子的運算子函式,不能作為類的成員函式,只能作為普通函式這是乙個規定,沒有為什麼
「<>」過載的函式宣告如下:
istream& operator>> (istream& input, ctime& time);//輸入流
ostream& operator
<
istream和ostream分別是輸入流類和輸出流類。cin和cout就分別是istream和ostream的物件。
注意:
**過載」<
過載」>>」流提取運算子的函式第乙個引數和返回型別必須是istream&型別。**
第二個引數是使用者自定義的類
ostream& operator<
}
>"過載">//因為要用到ctime類的成員,所以把流提取運算子作為ctime類的友元
istream& operator>>(istream& input, ctime& time)
friend istream& operator>>(istream& input, ctime& time);
在過載完流插入和提取運算子後,我們就可以對該類使用《輸出資料,使用》輸入資料。這樣是非常直觀的。
ctime time(10, 50, 20);
ctime time2(12);
cin >> time; //在我們過載了輸入輸出運算子之後,我們也可以像c++裡面預定義好的資料型別一樣對這個類的物件進行輸入輸出
cout
<< time << time2;
operator>>(cin, time);
operator
<
operator
<
在為ctime類過載+運算子後,我們就可以對兩個ctime物件使用+運算子進行操作。
但仍然不能使用+運算子將乙個ctime物件和乙個int型別相加。為了實現它,我們可以先將int型別轉換為乙個ctime的臨時物件,然後在進行相加。
如下:time + ctime(3)
ctime(3)這種形式很類似於強制型別轉換,將int型別轉換為ctime型別。之所以可以進行此種轉換,是因為已經為ctime物件定義了具有乙個int型別引數的建構函式。因此具有乙個引數的建構函式可以用來做型別轉換,稱之為轉換建構函式
有了型別轉換函式,在需要ctime型別引數的地方可以使用int型別代替
ctime time3(20);
ctime time4 =20;//和下面那句效果一樣的,自動型別轉換
ctime time5 = ctime(20);
func(time);
func
(10);//編譯器會自動構造乙個ctime的臨時物件
如果我們期望避免這種轉換,我們可以在含有乙個引數的建構函式前面加上宣告explicit
如:
explicit ctime(int
value);
這樣,我們使用前面的func(10),ctime time4 = 20;的時候,編譯器就會報錯
型別轉換函式用以將類的物件轉換另一種資料型別的函式。
型別轉換函式沒有引數,沒有返回型別。它是成員函式。
如 可以將ctime類物件轉換int型別。
int nsecond = time; //執行了將物件轉換為int型別的操作,呼叫型別轉換函式
型別轉換函式的宣告形式:
operator
int(); //int為它的返回型別
下面定義乙個型別轉換函式:
ctime::operator
int() //將乙個ctime類的物件轉換成秒數
int nsecond = time;
cout << nsecond;
最後面的那行輸出 6:3:3的秒數
型別轉換函式在平時比較少見,在這裡只介紹了一下如何使用的。
本文源自【人生之旅_諳憶的部落格】
過載流插入運算子《和流提取運算子》
includeclass complex complex double r,double i complex operator complex c2 friend ostream operator ostream output,complex c private double real double...
過載流插入運算子和流提取運算子
有兩個矩陣a和b,均為2行3列。求兩個矩陣之和。過載運算子 使之能用與矩陣相加,如c a b。過載流插入運算子 和流提取運算子 使之能用與該矩陣的輸入和輸出,如cin a,cout 我是剛學習c de菜鳥 源 如下 include using namespace std class matrix m...
關於過載流插入運算子和流提取運算子的問題
在c 編譯系統中,其類庫中提供輸入流類istream和輸出流類ostream,cin和cout分別是兩個類的物件。過載兩運算子格式如下 istream operator istream 自定義類 ostream operator ostream 自定義類 並且只能將其過載為友元函式,而不能作為自定義...