0

このためのオーバーロード コーディングの作成に問題があります。どこから始めればよいのか、どのように始めればよいのかよくわかりません。これを読んだ後でも、私はc ++を初めて使用し、リンクされたリストとノードを理解するのに苦労しています。これは私がこれまでに持っているものです。

#include "LList.h"
#include <iostream>

using namespace std;

std::ostream& operator<<(ostream& out, const LList& llist);

int main( )
{
LList a;

a.push_back(  "30" );
a.push_front( "20" );
a.push_back(  "40" );
a.push_front( "10" );
a.push_back(  "50" );

cout << "list a:\n" << a << '\n';

return 0;

}

ostream &operator <<( ostream &out, const LList& llist )
{
LList ::          //not sure what to really put from here

return out;
}

ここにスクリーンショットがありますここに画像の説明を入力

LList.h

#ifndef LList_h
#define LList_h

#include <iostream>
#include "node.h"


class LList
{
public:
LList(void);            //constructor
LList(const LList &);   //copy constructor
~LList();           //destructor
LList *next;            //points to next node
void push_back(const string &str);
void push_front(const string &str);
friend ostream& operator<<(ostream& out, const LList& llist);
LList &operator=(const LList &);        

private:
Node *_head;
Node *_tail;
LList *front;       //points to front of the list

};

inline LList::LList(void)
{
cerr << "default constructor";
}

inline void LList::push_back(const string &str)
{
Node *p = new Node(str);
if (_tail == 0)
{
    _head = _tail = p;
}
else
{
    _tail ->next(p);
    _tail = p;
}
if (_head == 0)
{
    _head = _tail = p;
}
else
{
    _head ->next(p);
    _head = p;
}
}

inline void LList::push_front(const string &str)
{
Node *p = new Node(str);
if (_tail == 0)
{
    _head = _tail = p;
}
else
{
    _tail ->next(p);
    _tail = p;
}
if (_head == 0)
{
    _head = _tail = p;
}
else
{
    _head ->next(p);
    _head = p;
}

}

inline LList::~LList( )
{
Node *p = new Node (str);

if ( _head == 0)
{
    _head = p;
}
else
{
Node *q;
//&Node::next;
    for (q = _head; q->next(); q = q -> next)
{
    //loop until we have
    //q pointing to the last node
}
q->next ( p);   //last node points to p
}       //_uead still points to the first node

}

#endif

私はこれでどこにいるのか本当にわかりません。私はちょうど物事を試していて、私の教授からのいくつかの例からいくつかのアイデアを得ています.

4

1 に答える 1

1

基本的に<<、オーバーロード内に印刷したい要素だけです。たとえばLList::front()、最初の要素を返すメンバー関数があると仮定すると、次のように出力できます。

ostream &operator <<( ostream &out, const LList& llist ) {
  return out << llist.front();
}

明らかに、最初の要素だけでなくリスト全体を出力したい (そしてリストが空かどうかをチェックする) こともできますが、それも同じ方法で行われます。これは、によって格納されている要素にオーバーロードがあることを前提としていますLList。そうでない場合は、それも提供する必要があります。

于 2013-02-14T01:38:00.417 に答える