c++ - 如何对类的 const 实例使用打印运算符?

标签 c++ class operator-overloading constants ostream

我使用 4 个类实现了边(如图中所示):Node、Node_Linkedlist、Edge、Edge_Linkedlist。 Node 有一个私有(private) 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.js 的 int 值。为什么运算符(operator)不为const Node工作?

最佳答案

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

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

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

关于c++ - 如何对类的 const 实例使用打印运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436799/

相关文章:

javascript - 如何在不复制的情况下将 canvas imageData 传递给 emscripten c++ 程序?

c++ - 获取指向迭代器引用的 STL 容器的指针?

python - 允许从类 B 调用属于类 A 的方法 m()

c++ - 模板化重载运算符的显式实例化

c++ - 将赋值运算符标记为左值是否会提高安全性?

c++ - 基于另一个数据成员的类数据成员类型?

c++ - 从编译时 vector 中删除相邻重复项的元程序

C++类继承

c++ - 通过构造函数初始化枚举

c++ - 运算符重载 = 修改原始对象