2010-05-02 19 views

回答

7

对于一个任意的类,比如说,Point,这里是一个相当干净的方式写出来一个ostream。

#include <iostream> 

class Point 
{ 
public: 
    Point(int x, int y) : x_(x), y_(y) { } 

    std::ostream& write(std::ostream& os) const 
    { 
     return os << "[" << x_ << ", " << y << "]"; 
    } 

private: 
    int x_, y_; 

}; 

std::ostream& operator<<(std::ostream& os, const Point& point) 
{ 
    return point.write(os); 
} 

int main() { 
    Point point(20, 30); 
    std::cout << "point = " << point << "\n"; 
} 
+1

+1。我唯一想补充的是,如果不想在类中使用公共的'write'方法,可以在类中声明全局重载的'operator <<'(_inserter_)作为'friend'然后将'write'私有,或将其代码直接移入插入器。 – stakx 2010-05-02 09:24:07

+0

谢谢你的建议@stakx。我曾经把它编写成没有写入的“朋友”,但发现编写'point.'非常繁琐。我必须承认,我从来没有考虑过私人的“写”选项。我想,一旦你决定使用“朋友”,重复的前缀比私人的“写”更省力。 – 2010-05-02 09:49:32

+0

事实上,我发现你的解决方案非常干净,公共的'write'肯定不会受到伤害,尤其是,因为它与另一个开发人员通信,该插件可能也适用于该类。我本人并不是“朋友”的大朋友,但认为需要为完整性而提及。 ;) – stakx 2010-05-02 10:03:02

相关问题