C 流插入 提取運算子和型別轉換

2021-09-22 20:33:30 字數 2491 閱讀 6929

流插入,流提取運算子過載和型別轉換的講解和例項

過載流插入和提取運算子的運算子函式,不能作為類的成員函式,只能作為普通函式

流插入運算子」<>」也可以被用來過載。

我們可以使用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 自定義類 並且只能將其過載為友元函式,而不能作為自定義...