今天被操作符「<>」的過載問題給糾纏一天,終於給搞懂了些。這一天的成果如果不來總結總結真的是對不起我的時間了。
今天突然想自己實現下標準庫 string 的部分功能,如構造,析構,輸入,輸出等。定義的類名為mystring。在實現「<
(1)在未查資料的情況下,部分**如下:
//file name: mystring.h
#include using std::cout;
using std::endl;
class mystring ;
//file name: mystring.cpp
#include "mystring.h"
mystring& mystring::operator<< (mystring s)
結果出現錯誤:error c2679: binary '<
出現錯誤的語句在上面標紅的句子上。想不明白原因,於是查了資料:有的說沒有引入iostream ;有的說要 operator<< 函式引數要加上 & 符號,即:mystring& operator<< (mystring &s)。 於是都照做了。結果:失敗!還是error c2679。先說下自己困惑的地方:
在這裡 operator<< 是類 mystring 的成員函式,而cout修改後語句1:
ms1執行程式
修改後語句2:
ms1結果又出現了同樣的錯誤。這完全不符合自己想要的結果,顯然這樣過載肯定是有問題的。於是繼續查資料。。。
。。。。。
發現,說"<
//file name: mystring.h
friend std::ofstream& operator<< (std::ofstream &os, const mystring &s);//注意ofstream
//file name: mystring.cpp
std::ofstream& operator<< (std::ofstream &os, const mystring &s)
{ cout結果:編譯錯誤!!!
還是error c2679: binary '<
我崩潰了。。。檢查**好久好久,竟然坑爹的發現自己犯了低階錯誤,把 ostream 寫成了 ofstream。 於是把**替換了。
結果:成功了!!!
下面進行重要的小結哈。。。。
1. 重要的一點,error c2679: binary '2. 既然用了友元函式,operator《可以看做是函式名,cout<3. 要可以連續輸出,則返回型別就應該為 std::ostream&
以上是今天的小小收穫,能力有限,有錯的地方希望大家指出哈。。。
關於c new操作符的過載
關於c new操作符的過載 你知道c 的new 操作符和operator new 的區別麼?也許你還會問,他們有區別嗎?當你寫下面這樣的 時,string pa new string memory managerment 你使用的是new 操作符,這個操作符和sizeof 一樣,是c 語言級別支援的...
關於c new操作符的過載
關於c new操作符的過載 你知道c 的new操作符和operator new的區別麼?也許你還會問,他們有區別嗎?當你寫下面這樣的 時,string pa new string memory managerment 你使用的是new操作符,這個操作符和sizeof一樣,是c 語言級別支援的。你不能...
過載前置操作符和後置操作符
i i的值作為返回值,i自增1 i i自增1,i的值作為返回值 現代編譯器產品會對 進行優化 優化使得最終的二進位制程式更加高效 優化後的二進位制程式丟失了c c 的原生語義 不可能從編譯後的二進位制程式還原c c 程式 操作符可以被過載 全域性函式和成員函式均可以進行過載 過載前置 操作符不需要額...