結構 公有類 的運算子過載

2021-07-08 17:33:51 字數 1602 閱讀 4159

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 ...