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

Hof*_*fbr 1 c++ ostream

在链接列表类中,我创建了一个display方法来打印链接列表,因为它当前的形式如下:

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

   while (curr) {
      std::cout << curr->n_data << " -> ";
      curr = curr->n_next;
   }
   std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Rem*_*eau 7

在这种情况下,最简单的解决方案是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;
}
Run Code Online (Sandbox Code Playgroud)
LinkedList list;
...
list.display(std::cout);
Run Code Online (Sandbox Code Playgroud)

然后,如果您决定重载operator<<,它可以简单地调用display(),例如:

std::ostream& operator<<(std::ostream &out, const LinkedList &list) {
    list.display(out);
    return out;
}
Run Code Online (Sandbox Code Playgroud)
LinkedList list;
...
std::cout << list;
Run Code Online (Sandbox Code Playgroud)