35章 グローバルな演算子オーバーロード
http://www.geocities.jp/ky_webid/cpp/language/035.html
演算子のオーバーロードはクラスのメンバ関数単位だけでなく、グローバルな演算子に対しても行えます。
その例としてstd::coutの<<演算子に自作のクラスも受け付けてくれるようにオーバーロードしてみます。
まずはオーバーロードなしの場合の挙動を見てみます。
#include <iostream> using namespace std; class CSample { public: CSample(int num) : m_num(num) {} int Get () const { return m_num; } private: int m_num; }; int main() { CSample obj(200); cout << obj << endl; return 0; }
これをコンパイルするとエラーが出まくります。objに対して<<演算子を適応した場合の振る舞いが不定だからです。
#include <iostream> using namespace std; class CSample { public: CSample(int num) : m_num(num) {} int Get () const { return m_num; } private: int m_num; }; ostream& operator<<(ostream& os,const CSample& obj) { return os << obj.Get(); } int main() { CSample obj(200); cout << obj << endl; return 0; }
$ main 200
これでうまく行きました。