我定义了一个LinkedList类,它使用了一个单独定义的Node类。每个节点都有一个指向下一个节点的指针。
在Node类中,我有
friend ostream& operator<<(ostream& ostr, const Node<T>& m);
在LinkedList类中,我有head,它是指向第一个Node的指针。
如何为LinkedList定义一个打印函数,该函数将迭代地调用重载的&lt;&lt;列表中每个节点的运算符?到目前为止我有
void LinkedList::print() {
Node* search = head;
while(search) {
cout << //print stuff here
search = search->getNext();
}
cout << endl;
}
答案 0 :(得分:0)
我很乐意向您推荐一个已发展的问题:
Operator overloading on class templates
其次,这里有一些我想出的东西:
写作:
friend ostream& operator<<(ostream& ostr, const LinkedList<T>& m);
在类声明中,您通知编译器您将使用运算符的重载&lt;&lt;与班级做某事(打印)。现在你必须定义函数。
请注意,它是一个全局函数,而不是类方法。
我也是&#34;固定&#34;你的代码中有两个错误。函数声明中的一个,LinkedList
应该是一个参数。直觉=&gt;因为要打印列表而不是节点。
第二行是在第一行,你必须接受m head
成员的地址。在你的&#34; C&#39; ish&#34;实施是必要的。
ostream& operator<<(ostream& ostr, const LinkedList<T>& m) {
Node* search = &(m.head); // You have to take the adrress of the head
while(search) {
ostr << //print stuff here
search = search->getNext();
}
ostr << endl;
return ostr;
}
返回流可能看起来很奇怪,但实际上它在语句中有意义:
LinkedList<Banana> bananas;
LinkedList<Apple> apples;
cout << bananas << apples;
由于bananas
需要cout
,因此请使用return
apples
{{1}}。
希望我没有过多地混淆它或者犯了任何错误。