使用重载<<运算符与类的指针

时间:2014-11-29 21:48:50

标签: c++ operator-overloading

我定义了一个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;
}

1 个答案:

答案 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}}。

希望我没有过多地混淆它或者犯了任何错误。