C++ 重载运算符<&书信电报;对于ostream语法

C++ 重载运算符<&书信电报;对于ostream语法,c++,operator-overloading,ostream,C++,Operator Overloading,Ostream,上学期我一直在复习一堂课上的一些旧作业。 这是一个给定的打印函数,用于打印出链表对象。 我不明白为什么重载运算符接受两个参数,一个是 操作系统对象。当我们在main.cpp上打印实际的链表对象时,我们没有这样做 需要传递一个os对象。还有,为什么它会返回操作系统?为什么我们不能用cout呢 而不是“操作系统”; } //重载运算符,因为它是全局非成员函数。对于成员函数版本,第一个参数隐式地是调用对象,this。这意味着你的班级必须总是在左手边。对于非成员函数,它是一个显式参数;通过这种方式,可以

上学期我一直在复习一堂课上的一些旧作业。 这是一个给定的打印函数,用于打印出链表对象。 我不明白为什么重载运算符接受两个参数,一个是 操作系统对象。当我们在main.cpp上打印实际的链表对象时,我们没有这样做 需要传递一个os对象。还有,为什么它会返回操作系统?为什么我们不能用cout呢 而不是“操作系统”; }
//重载运算符,因为它是全局非成员函数。对于成员函数版本,第一个参数隐式地是调用对象,
this
。这意味着你的班级必须总是在左手边。对于非成员函数,它是一个显式参数;通过这种方式,可以指定所需的任何类型,并为不能修改源的类重载运算符(只要至少有一个参数是用户定义的类型)

使用
os
的原因是它可以处理文件流和所有东西(从
ostream
继承的任何东西),而不仅仅是
cout

它返回
os
,以便您可以执行更多
操作
我不明白为什么重载操作符接受两个参数,一个是os对象。当我们在main.cpp上打印实际的链表对象时,我们不需要传递os对象

是的,当你说
cout时
当我们在main.cpp上打印实际的链表对象时,我们
不需要传递os对象


是的,你做到了。。类似于
cout问题的提问方式以及它的基本程度,我将尝试给出一个非常简单的答案(尽管相当非正式,也不那么迂腐)

我不明白为什么重载运算符需要两个参数 一个是操作系统对象

操作员“流”?这是“字符串流”的拼写错误吗?
template <class T>
void List<T>::print(ostream & os) const
{
    os << "<";
    ListNode * curr = head;
    while (curr != NULL) {
        os << " " << curr->data;
        curr = curr->next;
    }
    os << " >";
}



// overloaded operator<<
template <class T>
ostream & operator<<(ostream & os, const List<T> & list)
{
    list.print(os);
    return os;
}
cout << 123;
my_list.print(cout);
template <class T>
void print(const List<T>& my_list, ostream& os);
cout << "hello " << "world";