重载输出操作符<<怎样定义为非成员函数?
如果定义为成员函数,不好用
#include <stdafx.h>#include <iostream>#include <string>using namespace std;class A{public: A(int i,const string &s):i(i),s(s){} // 定义为成员函数时,this指针绑定到左操作数,所以用起来很不习惯哦 ostream& operator<<(ostream &os) { os<<i<<s; return os; }private: int i; string s;};int main(int argc,char* argv[]){ A a(88,"abc"); a<<cout; // 不习惯... system("pause"); }#include <iostream>#include <string>using namespace std;class A{public: A(int i,const string &s):i(i),s(s){} // 定义为成员函数时,this指针绑定到左操作数,所以用起来很不习惯哦 ostream& operator<<(ostream &os) { os<<i<<s; return os; } friend ostream& operator << (ostream &os, const A& a) { return os << a.i << a.s; } private: int i; string s;};int main(int argc,char* argv[]){ A a(88,"abc"); a<<cout; // 不习惯... cout<<endl<<a<<endl; // 这样就习惯了吧 system("pause"); }
[解决办法]
建议将ostream类声明为友员