ostream难度大

时间:2012-06-16 15:16:21

标签: c++ ostream

ostream& operator<<(ostream& os, const PT& p)
{
   os << "(" << p.x << "," << p.y << ")";
}

PT是一个结构,xy是其成员 有人可以解释上面这行是什么。无法使用cout打印所需的文字?

我从this site找到了这段代码。

4 个答案:

答案 0 :(得分:4)

operator<<custom overload

这意味着你可以这样做:

PT p = ...;
std::cout << p << "\n";

或者这个:

PT p = ...;
std::stringstream ss;
ss << p << "\n";
std::cout << ss;

或许多其他有用的东西。

但是,应该注意您引用的代码无法正常工作。它需要返回os

答案 1 :(得分:1)

这提供了输出PT的方法。现在,你可以使用它:

PT p;
std::cout << p;

这被转换为

的调用
operator<< (std::cout, p);

匹配您的重载,因此它可以正常工作,在括号中打印x和y值,而不需要用户的努力。实际上,它不一定是cout。它可以是“是”std::ostream的任何东西。有很多东西可以从它继承,这意味着它们也是std::ostream,所以这也适用于它们。 std::ofstream,对于文件I / O,就是一个例子。

您发现的样本没有做的一件事,但应该是return os;。如果不这样做,则无法说出std::cout << p << '\n';,因为打印p的结果不会返回cout,您无法使用它来打印换行符。

答案 2 :(得分:0)

它允许&lt;&lt;运算符将PT对象附加到流。看来该对象具有用逗号分隔符添加的元素x和y。

答案 3 :(得分:0)

此运算符&lt;&lt; 重载以输出PT类的对象。

下面:

ostream& operator<<(ostream& os, const PT& p)

第一个参数用于输出流,其中将附加 p 。 它将引用返回到 os 以进行链接:

cout << pt << " it was pt" << endl;