首先遇到这个问题是在使用 ofstream对象的时候:
有一个自定义的类 class A ,和该类对象a。,然后我想把a的内容输出到ofstream中。怎么办呢?最直接的办法就是定义一个A类的子类my_ofstream, 然后在my_ofstream中
定义成员操作符<<如下:
class my_ostream:public ostream
{
public:
ofstream& operator<<(A a)
{
(*this)<<a.xx<<a.xxx... //这里的xx xxx代表a的成员变量,都是基本类型
return *this;
}
};
注意,my_ofstream还要声明为A类的友元。
这样是不是很麻烦呢。可以采用如下的办法:
只需要定义一个全局函数
ofstream & operator<<(ofstream & os, A a)
{
os<<a.xx<<a.xxx...
return *this;
}
这是不是很简洁呢。其实上面的,两种方法异曲同工:
在类my_ofstream中调用其成员操作符时,我们都知道编译器会自动将该对象的this指针作为暗含的参数传递给成员函数。这也正是c++类中定义单目操作符时不需要参数,而双目操作符只需要一个参数的原因。也就是如下调用等价:
a+双目操作符(参数1)=双目操作符(&a, 参数1)