typedef struct _tag_foo
tag_foo;
/// 對結構(公有類)的操作符過載要放在結構體外面才能編譯過
ostream& operator<<(std::ostream& os, _tag_foo src)
ostream& operator<<(std::ostream& os, _tag_foo* psrc)
void fntestpublicclass()
和同學討論中發現, 如果要讓cout可以使用我們過載後的 <<, 必須要將 << 過載操作放到結構體外面才可以.
還有一點細節.
/// 如果沒定義這個 ostream& operator<<(ostream& out, const complex ncomplex)
/// 會進入上面那個 ostream& operator<<(ostream& out, const complex& ncomplex)
demo:
/// @file exam_1_10.cpp
/// @brief 測試結構體重載<<
#include #include #include #include using namespace std;
/* 複數 */
typedef struct stcomplex
*/ostream& operator<<(ostream& out)
}complex;
ostream& operator<<(ostream& out, const complex& ncomplex)
ostream& operator<<(ostream& out, const complex ncomplex)
complex& add(complex& mcomplex, const complex& ncomplex)
void clear_cin();
int main(int argc, char** argv, char** envp)
; complex ncomplex = ;
complex ccomplex = add(mcomplex, ncomplex);
// vc6編譯不過
// error c2679: binary '<<' : no operator defined which takes a right-hand operand of type 'struct stcomplex' (or there is no acceptable conversion)
cout << ccomplex; ///< 隱式呼叫不行, 呼叫不到結構裡面過載的 <<
// 如果要隱式呼叫, 必須將 << 過載放到結構外面
ccomplex.operator<<(cout); ///< 顯式呼叫可以
cout << "end, press any key to quit" << endl;
clear_cin();
getchar();
return 0;
}void clear_cin()
運算子過載 類的賦值運算子過載
下面介紹類的賦值運算子 1.c 中物件的記憶體分配方式 在c 中,物件的例項在編譯的時候,就需要為其分配記憶體大小,因此,系統都是在stack上為其分配記憶體的。這一點和c 完全不同!千 萬記住 在c 中,所有類都是reference type,要建立類的實體,必須通過new在heap上為其分配空間...
運算子類過載
類過載格式 函式型別 operator 運算子名稱 形參表 型引數 使用引數 1 使用 號實現複數相加 不使用類過載 include using namespace std class complex complex double r,double i complex complex add com...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...