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