2014-09-12 42 views
0

我已经得到了这些指令,让我在这里通过一个循环。我需要重载插入操作符来打印出一个对象数据成员。但是,它指出,overloader必须是非朋友帮手操作员。作为非朋友帮手操作员超载cout

如果是这样的话,如果它不是'朋友',它如何访问私有数据成员?如果这是可能的,为什么我应该避免使用'朋友'?

下面是你应该说一个字一个字:

  • 帮手非好友运算符插入存储串入左ostream的操作数。
    此操作前加上插入的数目字符串,并增加这个数字

我有点新的C++,所以我真的很感激帮助。

回答

3

如果不是朋友,它需要使用对象的公共接口(ergo,您需要编写对象的公共接口以包含插入运算符所需的访问权限)。

例如,你可能会做这样的事情:

class thing { 
    std::string name; 
public: 
    std::string get_name() const { return name; } 
    // ... 
}; 

std::ostream &operator<<(std::ostream &os, thing const &t) { 
    return os << t.get_name(); 
} 

注意,我绝对不推荐这是很好的做法 - 而相反,我认为这是经常一个更好的主意让插入操作员成为朋友。但是,如果你在一个班级,并且你被禁止以正确的方式做事,你就做你必须做的事情......

+0

我猜想一定有不同。我究竟该怎么做呢? – Kris 2014-09-12 17:11:34

+0

@SomeDeveloper:我已经添加了一个例子。 – 2014-09-12 17:17:06

+0

非常感谢杰里。是的,这似乎很奇怪。但是,唉,我认为它只是为了让人们“思考”而不是强制适当的做法。谢谢你的帮助! – Kris 2014-09-12 17:18:08