c++求operator<<的例子
我估計是要過載流輸出運算子<<,比如cout<<a;原來的形式是 operator<<(cout,a); 由於<<需要用到兩個類,一個是ostream類,cout就是他的物件,是負責輸出的類;另一個是使用者自定義類。
所以過載是應該用 友元函式 過載。如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
注意上面的ostream& operator<<(ostream& out,const Date& date)的3個引用&,
1. 第一個ostream&,返回的是ostream類物件的引用,為了進行連續的運算,如cout<<a<<b;
先進行cout<<a,運算玩了,返回cout的引用,就是返回了cout本身,原來的式子變為cout<<b;
這樣就能連續寫了,cout<<a<<b<<c<<........
2. 第二個ostream& out, out是隨便取的名字,就是ostream類的物件,與cout用法一樣,通過<<將資料傳到out裡,所以輸出時用cout<<a,這時就呼叫 operator<<(cout,a), 把cout作為引數傳入。對於上述例子cout<<date<<endl;,就是執行了cout<<date.year<<'-'<<date.month<<'-'<<date.day; return cout;(注意,這裡就是cout,其中year等是基本型別,c++已經寫好了)
再次說明cout並不特殊,就是預先定義好了的ostream類的物件。
3. 第三個const Date&,主要為了快速出入引數,如果不用&,將會複製一個引數,而不是將原來的物件直接傳入,就會呼叫拷貝建構函式(如果沒寫的話編譯器自動提供),浪費時間,有時還會產生錯誤,比如資料成員裡有指標時,編譯器提供的拷貝建構函式將會自動複製 一個指標,與原來的指標指向同一個地址,這樣改變一個另一個也會改變,這是我們不想要的,我們需要拷貝時指標指向不同的地址,兩個物件互不干擾,只是指標所指變數的值相等就行,這就需要自己寫 拷貝建構函式,自己new等。 所以一般用&,加const