ostream& operator<< 在类中的实践比使用 std::cout 更好吗?

2024-06-18

在链接列表类中,我创建了一个display打印出链接列表的方法,目前的形式如下:

void LinkedList::display() {
   Node* curr = m_head;

   while (curr) {
      std::cout << curr->n_data << " -> ";
      curr = curr->n_next;
   }
   std::cout << std::endl;
}

一位对作业进行评分的助教留下了评论:

切勿在类文件中执行 cout。使用ostream& operator<<反而。

类不应该关心输出到哪里(文件/控制台/等)。

在这次作业时我们还没有了解运算符重载,但我仍然不太确定。

我将如何实际实施和使用ostream& operator>>打印到控制台?为什么这是最佳实践?


在这种情况下,最简单的解决方案是添加一个std::ostream参数给你的display()方法,例如:

void LinkedList::display(std::ostream &out) const {
   Node* curr = m_head;

   while (curr) {
      out << curr->n_data << " -> ";
      curr = curr->n_next;
   }
   out << std::endl;
}
LinkedList list;
...
list.display(std::cout);

然后,如果接下来,你决定超载operator<<,它可以简单地调用display(), eg:

std::ostream& operator<<(std::ostream &out, const LinkedList &list) {
    list.display(out);
    return out;
}
LinkedList list;
...
std::cout << list;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ostream& operator<< 在类中的实践比使用 std::cout 更好吗? 的相关文章

随机推荐

  • grpc 活跃客户端/通道数量

    我正在实现一个简单的 grpc 服务发现 我想做的一件事是跟踪当前有多少客户端使用该服务 并且该服务会将其报告给服务注册表 grpc server api 是否提供此类信息 我在这里遇到了一个有点类似的问题 https github com
  • 矢量之间的碰撞检查 - 移动矢量 - HTML、JS、P5

    我为我的玩家创建了碰撞检查功能 每次当对象 在本例中为矢量 圆 接触玩家 也是矢量 圆 时 游戏就会结束 我已经成功创建了一个逻辑 并且有一个碰撞检查正在工作 但是它并没有计算元素之间的实际距离 而不是当它们彼此相距一定距离时实际触及其结局
  • 如何将图像转换为纹身? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我后来正在使用纹身应用程序 因为我需
  • JavaFX 抛出 ArrayIndexOutOfBoundsException

    我正在尝试使用 JavaFX 标签和组 通过鼠标拖动将它们移动到屏幕上 新节点从某些线程添加到动画组中 然而 有时我会突然看到以下异常 我假设 当某些节点重叠时 但我不知道问题是什么 因为我的代码不涉及 有谁知道这个异常和根本原因 使用JD
  • 解码 JavaScript 字符串中包含十六进制的转义序列

    我有一个 JS 格式的字符串 http x3a x2f x2fwww url com 我怎样才能从中得到解码后的字符串 我尝试了 unescape string decode 但它没有解码它 如果我在浏览器中显示该编码字符串 它看起来不错
  • 如何从报告中访问报告名称属性?

    在 jasper 报表中 使用 iReports Designer 可以将报表名称设置为某个值 在 iReports 中 该值位于报表检查器的最顶层节点上 稍后如何在例如内部访问此参数的值 同一报告的变量或文本字段 在 的帮助下贾斯珀 报告
  • Jlabel HTML 格式

    我有一个 JLabel 里面有一个电子邮件地址 我在 JLabel 上使用了 HTML 格式 因此它显示为链接 但是 您无法单击该链接 事实上 您无法选择标签中的任何文本 我是否可以在 JLabel 上设置一个属性 以允许用户至少选择电子邮
  • Eclipse:覆盖 Tomcat 中的 JNDI 资源

    我正在 Eclipse 中开发 Java Web 应用程序 并将其部署到由 Eclipse 运行的 Tomcat 实例 我正在尝试让此应用程序通过 JNDI 与另一台主机上的数据库进行通信Resource元素 应用程序中包含的 contex
  • 使用 HttpClient 调用 WCF 服务

    我必须调用 WCF 服务 WCF 服务已开启 我可以编辑其配置 我想创建一个调用该服务的客户端 我无法将服务引用添加到我的客户端 因此我尝试使用 HttpClient 调用它 客户端代码 using var client new HttpC
  • 驱动程序在 Jenkins 中不是可执行错误,但在本地计算机 (MacBook) 中运行

    我正在 MacBook 上工作 当我通过testing xml文件运行测试时 我们的Jenkins服务器正在Linux服务器中运行 所有测试类都在运行 但是当我运行Jenkins构建时 它没有运行 错误提示驱动程序不可执行 我已经在 J e
  • 在 blazor 中添加全局使用指令

    命名空间 MyClassLibrary Models 中不存在类型或命名空间名称 XXX 是否缺少程序集引用 该错误参考此 BlazorProject MyPager azor g cs 在这种情况下我得到了这个错误 创建了一个类型的文件
  • 如何使用 AppDelegate 在视图之间共享 iAd 横幅

    我希望在我的应用程序中实现 iAd 到目前为止 我已经成功地使用下面的方法让它们在每个视图中正确显示 关闭 应用程序委托 import UIKit import iAd UIApplicationMain class AppDelegate
  • Oracle 中的日期字符串(以毫秒为单位)

    我想将以下字符串转换为日期 2004 09 30 23 53 48 140000000 I tried to date YYYY MM DD HH24 MI SS FF9 But PL SQL http en wikipedia org w
  • 如何使用jq将JSON对象流转换为数组

    我想用jq将 json 对象流放入 json 数组中 例如 来自 a 1 b 2 to a 1 b 2 但这是行不通的 echo a 1 b 2 jq 自从我得到 a 1 b 2 用吸吮它 s option jq s lt lt lt a
  • Django - 使用静态文件的奇怪行为

    我是姜戈的新手 我试图理解静态文件 css 和图像 发生了什么而变得疯狂 问题的简历如下 当我使用来自第三方应用程序 Haystack 的静态视图时 我无法使用静态文件 我的项目有这样的目录结构 1001empbr name of the
  • Python 3.6.1 安装位置

    我在 Ubuntu 16 服务器上安装了 Python 3 6 1 但找不到安装位置 我查看了 usr bin 其中提到了除 3 6 1 之外的所有其他版本 在哪里可以找到该版本的可执行文件 使用命令 whereis python3 6 1
  • Chrome 扩展 - 第一个链接在弹出窗口中自动聚焦

    如何停止 Google Chrome 扩展程序的默认操作以自动聚焦我的网站中的第一个链接popup html 我知道我可能可以用 JS 做一些迂回黑客或改变 focusCSS 但我认为这抛弃了我正在尝试做的其他事情 我更愿意阻止它的根本原因
  • 读取上传的Excel文件而不保存它

    在这段代码中 我从用户那里获取上传的文件并将其保存在我的应用程序中的文件夹中 然后对此 Excel 文件进行 OleDbConnection 并读取数据 我的问题是 有人可以建议一种阅读此 Excel 文件的首选方法 但无需预先保存它 因为
  • DOCX 到 PDF:SaveAs2、ExportAsFixedFormat 与 PrintOut

    我有一个小小的目标 即使用 C 和 NET 将大量 docx 文件转换为 pdf 而无需打开 Word 可见 且无需使用任何第三方库 需要管理的组件更少 花费的资金也更少 目前 我正在尝试正确转换单个文档 该文档必须尽可能高效 以便快速转换
  • ostream& operator<< 在类中的实践比使用 std::cout 更好吗?

    在链接列表类中 我创建了一个display打印出链接列表的方法 目前的形式如下 void LinkedList display Node curr m head while curr std cout lt lt curr gt n dat