首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

重载输出操作符<<怎样定义为非成员函数?该如何解决

2012-03-15 
重载输出操作符怎样定义为非成员函数?如果定义为成员函数,不好用C/C++ code#include stdafx.h#include

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

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类声明为友员

热点排行