读书人

重载输出操作符lt;lt;怎样定义为非成员函数

发布时间: 2012-03-15 11:50:38 作者: rapoo

重载输出操作符<<怎样定义为非成员函数?
如果定义为成员函数,不好用

C/C++ code
#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");    }


但是定义为非成员函数的话又不能直接访问A类里的private成员,如果定义GetValue之类的public函数也挺麻烦的
不知道怎么处理好

[解决办法]
声明为友元函数即可
[解决办法]
探讨
声明为友元函数即可

[解决办法]
C/C++ code
#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类声明为友员

读书人网 >C++

热点推荐