我的代码是在审查: https://codereview.stackexchange.com/questions/3754/c-script-could-i-get-feed-back/3755#3755C++朋友语法/语义问题
以下使用:
class Point
{
public:
float distance(Point const& rhs) const
{
float dx = x - rhs.x;
float dy = y - rhs.y;
return sqrt(dx * dx + dy * dy);
}
private:
float x;
float y;
friend std::istream& operator>>(std::istream& stream, Point& point)
{
return stream >> point.x >> point.y;
}
friend std::ostream& operator<<(std::ostream& stream, Point const& point)
{
return stream << point.x << " " << point.y << " ";
}
};
由另一个构件。我不明白朋友的功能在做什么。有没有另一种方法来做到这一点,而不使他们的朋友功能?客户如何使用以下方式访问他们?有人能说明究竟返回什么吗?
int main()
{
std::ifstream data("Plop");
// Trying to find the closest point to this.
Point first;
data >> first;
// The next point is the closest until we find a better one
Point closest;
data >> closest;
float bestDistance = first.distance(closest);
Point next;
while(data >> next)
{
float nextDistance = first.distance(next);
if (nextDistance < bestDistance)
{
bestDistance = nextDistance;
closest = next;
}
}
std::cout << "First(" << first << ") Closest(" << closest << ")\n";
}
@ Nawaz谢谢,我需要回顾一下Stroustrup的书。你了解正在返回的内容的语法吗? –
@ Nawaz再次感谢,据说,我明白返回的类型,但它是返回这种类型的语义/功能。我假设stream >> point.x >> point.y从流构造函数中的文件读入x和y成员变量。但为什么要退货呢,为什么不把它留在那呢? –
@Matthew:你返回它表明你可以写'stream << point1 << point2',也就是说,你可以在* chain *调用中使用它。 – Nawaz