Как это правильно сделать?
Вообще у нас есть список, в котором мы делаем перезагрузку операций:
+ – объединить списки (list+list);
-- – удалить элемент из начала (--list);
= = – проверка на равенство.
SPISOK.CPP
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
| #include <conio.h>
#include <iostream.h>
#include "SPISOK1.H"
List::~List()//деструктор
{
while (Head!=0)//пока по адресу не пусто
{
element *temp=Head->Next;//временная переменная для хранения адреса следующего элемента
delete Head;//освобождаем адрес, обозначающий начало
Head=temp;//меняем адрес на следующий
}
}
void List::Input(int N)//здесь должна быть функция добавления количества элементов, что тут написать?
{
};
void List::Input(int x)//функция добавления элементов в список
{
element *temp=new element;//при каждом вызове выделяется память
temp->x=x;//записываем x в элемент структуры element
temp->Next=Head;
Head=temp;
}
void List::Print()//функция отображения списка на экране
{
element *temp=Head;
while (temp!=0)
{
cout<<temp->x<<" ";
temp=temp->Next;
}
}
int List::operator == (const List &list2)//перегрузка операции присваивания
{
if (N!=list2.N)//сравниваем размеры списков объектов
{
cout<<endl<<"spisok 1 "<<N;
cout<<endl<<"spisok 2 "<<list2.N;
cout<<endl<<"V spiskah raznoe kolichestvo elementov";
return 0;
}
else
{
for (int i=0;i<N;i++)
{
if (x[i]!=list2.x[i])
{
cout<<"Znacheniya spiskov ne ravni";
return 0;
}
}
}
return 1;
}
const List& List::operator=(const List &list2)//перегрузка оператора присваивания
{
delete [] x;
N=list2.N;
x=new int [N];
for (int i=0;i<N;i++)
{
x[i]=list2.x[i];
}
return *this;
}
List& List::operator +(List &list2)//перегрузка оператора сложения списков
{
for (int i=0;i<N;i++)
{x[i]=list2.x[i]+x[i];}
return *this;
}
void List::operator--()//перегрузка оператора удаления элемента из списка
{
element *temp=Head,*r;
int i=0;
if (N==0)
{
Head=temp->Next;
delete [] temp;
/* return Head;*/
}
while(temp)
{
if (i==N-1)
{
r=temp->Next;
if(r)
{
temp->Next=r->Next;
delete [] r;
}
else temp->Next=0;
}
temp=temp->Next;
i++;
}
/*return Head; */
} |
|
SPISOK1.H
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #ifndef SPISOK1_H
#define SPISOK1_H
struct element
{
int x;
element *Next;
};
class List
{
int *x;
int N;
element *Head;
public:
List() {Head=0;}
~List();
void Input(int x);
void Input(int N);
void Print();
int List::operator == (const List &);
const List& operator=(const List&);
List& operator +(List &);
void operator--();
};
#endif |
|
SPISOK2.CPP
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| #include <conio.h>
#include "SPISOK1.H"
#include <iostream.h>
void main()
{
int x,N;
clrscr();
List lst;
cout<<"N = ";cin>>N;
Ist.Input(N);
for (int i=0;i<N;i++)
{
cout<<i+1<<". x = "; cin>>x;
lst.Input(x);
}
lst.Print();
List lst2;
cout<<endl<<"N = ";cin>>N;
Ist2.Input(N);
for (i=0;i<N;i++)
{
cout<<i+1<<". x = "; cin>>x;
lst2.Input(x);
}
lst2.Print();
if(lst==lst2)
{
cout<<endl<<"Spisok 1 raven spisku 2\n";
}
else
{
lst=lst2;
cout<<endl<<"Spisok 1 posle kopirovaniya: ";
lst.Print();
}
getch();
} |
|