【问题标题】:How do I use print operator for a const instance of a class?如何将 print 运算符用于类的 const 实例?
【发布时间】:2012-05-13 06:54:43
【问题描述】:

我使用 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工作?

【问题讨论】:

  • 您想知道出了什么问题(长),或者如何解决(短)?
  • @Beta 你的意思是,除了现有的答案?
  • 没关系;我的评论和@LuchianGrigore 的回答交叉了。 (我会写比他更长的解释,但我认为不会更好。)

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


【解决方案1】:

您的代码无效-您将非常量引用绑定到构造函数中的临时对象-Node(tmpin)Node(tmpout) 是临时对象-并遇到未定义的行为。要支持 const,您要么需要将成员 const 设为指针,要么将它们设为对象而不是引用。

就个人而言,我会让它们成为智能指针:

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

【讨论】:

  • 我不确定是否需要成员为 const。谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 2022-06-13
相关资源
最近更新 更多