Chr*_*uts 0 c++ class operator-overloading friend
class Train{
public:
char direction;
int loading_time, crossing_time;
...
friend std::ostream& operator<<(std::ostream& os, const Train& t){
os << t.direction << '/' << t.loading_time << '/' << t.crossing_time;
return os;
}
};
Run Code Online (Sandbox Code Playgroud)
为什么在这种情况下需要“朋友”?所有属性都是公共的。我应该只使用结构体吗?
friend为了使该函数成为全局函数,需要使用。如果省略它,该函数将被视为成员函数,在这种情况下它应该只获得一个参数,并且调用者应该是类型Train(我们声明的类类型),这不符合我们的需求。
您可以在您的情况下使用全局函数:
class Train{
public:
char direction;
int loading_time, crossing_time;
...
};
std::ostream& operator<<(std::ostream& os, const Train& t){
os << t.direction << '/' << t.loading_time << '/' << t.crossing_time;
return os;
}
Run Code Online (Sandbox Code Playgroud)
然而,对于这个用例,使用友元函数(而不是非友元全局函数)是很常见的,因为它是在类内部声明的,这是您获得的一个重要的额外好处。