私は2つのリストを読み込み、オーバーロード+演算子を連結しようとしています。私はクラスでかなり新しいので、私が欲しいのは覚えておいてください。私はストリームの演算子をオーバーロードして、オブジェクトを通常のものと逆のものを読み書きすることができます。 My +演算子はリストを連結しますが、問題はmain(list1 = list1 + list2;またはlist3を書き込んだ後、list1とlist2を連結した後)のようです。私はインターネット上のほぼすべての場所で答えを探しましたが、私はこれを投稿し終えました。より速く、より簡単に成長できるリンクやチュートリアルがあれば、私は新しいアイデアを公開しています。リストクラス2つの二重リストを連結する+演算子のオーバーロード
はメインclass Lista
{
private:
nod *head;
nod *tail;
int size;
public:
Lista();
~Lista();
friend istream &operator >>(istream &input, Lista &a)
{
int i;
cout << "Size of the list: ";
input >> a.size;
nod *q = new nod;
q->prev = NULL;
cout << "\nFrist node: ";
input >> q->data;
a.head = q;
a.tail = a.head;
for (i = 1; i < a.size; i++)
{
nod *q = new nod;
cout << "\nNode number " << i + 1 << " is: ";
input >> q->data;
a.tail->next = q;
q->prev = a.tail;
a.tail = q;
a.tail->next = NULL;
}
return input;
}
friend ostream& operator <<(ostream &output, Lista &a)
{
output << "\n\nNormal writing: ";
nod *q = new nod;
q = a.head;
while (q != NULL)
{
output << q->data << " ";
q = q->next;
}
q = a.tail;
output << "\n\nReverse writing: ";
while (q != NULL)
{
output << q->data << " ";
q = q->prev;
}
return output;
}
Lista &operator+(Lista &rec)
{
Lista temp;
temp.head = head;
temp.tail = tail;
temp.tail->next = rec.head;
rec.head->prev = temp.tail;
temp.tail = rec.tail;
temp.size = size;
temp.size = temp.size + rec.size;
return temp;
}
};
class nod
{
public:
int data;
nod *next;
nod *prev;
friend class Lista;
nod();
};
:これを読んで、^^
ノードクラスを支援するtryngのためにたくさんありがとうござい
int main()
{
Lista a,b,c;
cin>>a;
cin>>b;
c=a+b;
cout<<c;
return 0;
}
あなたは(http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)[3の規則]を、次のされていません。ユーザ定義のコピーコンストラクタを書くまでは、 'operator +'で何かをすることはできません。また、このタイプのコーディングは初心者向けではなく、経験豊富なC++コーダー向けです。私は初心者が基本的に経験豊富なコーダを持っていなくても、この問題を解決することはまだありません。 – PaulMcKenzie
私は "c = a + b"を使いたいと思ったら、=演算子をオーバーロードする必要がありますか? –
3のルールに従う必要があります。つまり、コピーコンストラクタ、代入演算子、デストラクタ、*を実装する必要があります。*正しく動作する必要があります。既にコーディングしたものについては、別のやり方で済むべきことがたくさんあります。リストに項目を追加したいのですが、ストリームを使いたくないのですが?私の最初のコメントが示唆しているように、これは私または他のSOのメンバーに、既に書かれたコードを指示するか、またはこれを正しく行う方法を示すために全部を書くことになるでしょう。初心者*決して*これは正しい、私を信じて取得します。 – PaulMcKenzie