如何将print运算符用于类的const实例?

时间:2012-05-03 17:54:57

标签: c++ class operator-overloading const ostream

我使用4个类实现边缘(如图中所示):Node,Node_Linkedlist,Edge,Edge_Linkedlist。 Node有一个私有int成员,Edge有2个Node节点引用成员:

private:
    Node& in;
    Node& out;

Edge有2个工作构造函数,因此Edge支持Nodeconst Node

Edge(Node& tmpin, Node& tmpout) : in(tmpin),out(tmpout) {};
Edge(const Node& tmpin, const Node& tmpout) : in(Node(tmpin)),out(Node((tmpout))) {};

<<运算符:

ostream& operator<<(ostream& out, const Edge& node)
{
    out<<node.in<<endl;
    return out;
}

这适用于Node但不适用于const Node。在const Node中,作为运算符范围内的调试器,它会转储Node的int值。为什么运算符不能用于const Node

1 个答案:

答案 0 :(得分:3)

您的代码无效 - 您在构造函数中绑定了一个非const引用 - Node(tmpin)Node(tmpout)是临时的 - 并且遇到了未定义的行为。要支持const,您需要使您的成员const,指针或使其成为对象而不是引用。

就个人而言,我会把它们变成聪明的指针:

private:
  std::shared_ptr<Node> in;
  std::shared_ptr<Node> out;