重载输出操作符<<怎样定义为非成员函数?
如果定义为成员函数,不好用
但是定义为非成员函数的话又不能直接访问A类里的private成员,如果定义GetValue之类的public函数也挺麻烦的
不知道怎么处理好
#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++ operator关键字(重载操作符)的用法详解
非成员函数(全局函数)如果重载操作符需要处理不同类型的对象,或者左右操作数都不属于同一类,可以使用非成员函数。
C重载输入与输出操作符-C教程共5页.pdf.zip
**非成员函数**:虽然可以作为成员函数重载,但通常推荐将其作为非成员函数,因为这样可以避免依赖特定的基类层次结构。3.
C++操作符重载手册
**输入/输出操作符** `operator>>`和`operator<<`通常作为非成员函数重载,以符合流式输入输出的习惯。6.
C++运算符重载友元函数实例
**非成员函数的运算符重载**有时,运算符重载更自然地作为非成员函数实现,特别是当运算符应用于不同类型的对象时。非成员函数可以保持对象封装,避免暴露过多的内部细节。


