
Сообщение от
Uz
Только у меня возник ещё один вопрос: а если у меня есть два объекта класса список, например Spisok odin и Spisok dva, как мне обращаться к их элементам и устраивать по ним проход?
У вас список немного другого вида, чем я описал, есть ещё указатель на конец списка (Element *Tail), но в принципе, это ничего не меняет. Если есть два списка, Spisok odin и Spisok dva, то доступ к переменным объекта класса, как обчно:
C++ |
1
2
| Element *ptr1 = odin.Head; // ptr1 указывает на начало первого списка.
Element *ptr2 = dva.Head; // ptr2 указывает на начало второго списка. |
|
Только перед этим, вам необходими переместить переменные-члены класса Spisok в public раздел, иначе у вас к ним доступа из main() не будет, или нужно создать метод, который будет выдавть указатель на начало списка.
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
| class Spisok
{
public:
Element *Head;
Element *Tail;
int razmer;
Spisok():Head(NULL),razmer(0) {}; //Инициализация значений с помощью конструктора
~Spisok();
void Add(int x);
void Show();
}; |
|
А дальше, как я описывал:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #include <iostream>
using namespace std;
int main()
{
Spisok odin;
Spisok dva;
Element *ptr1 = odin.Head; // ptr1 указывает на начало первого списка.
Element *ptr2 = dva.Head; // ptr2 указывает на начало второго списка.
while ( ptr1 != NULL) // обход первого списка.
{
ptr1 -> x = 5; // присвоение значения переменной элемента списка.
ptr1 = ptr1 -> Next; // в ptr1 адресс следующего элемента списка.
}
while ( ptr2 != NULL) // обход второго списка.
{
ptr2 -> x = 10;
ptr2 = ptr2 -> Next;
}
system("pause");
return 0 ;
} |
|
Добавлено через 17 минут
Если же проблема в том, чтобы оставить переменные-члены класса Spisok в приватном разделе, то тогда так:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| class Spisok
{
Element *Head;
Element *Tail;
int razmer;
public:
Spisok():Head(NULL),razmer(0) {}; //Инициализация значений с помощью конструктора
~Spisok();
void Add(int x);
void Show();
Element* getHead(); // метод для получения указателя на начало списка.
};
Element* Spisok::getHead()
{
return Head; // возвращает указатель на начало списка.
}
..................................... |
|
и так:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #include <iostream>
using namespace std;
int main()
{
Spisok odin;
Spisok dva;
Element *ptr1 = odin.getHead(); // ptr1 указывает на начало первого списка.
Element *ptr2 = dva.getHead(); // ptr2 указывает на начало второго списка.
while ( ptr1 != NULL) // обход первого списка.
{
ptr1 -> x = 5; // присвоение значения переменной элемента списка.
ptr1 = ptr1 -> Next; // в ptr1 адресс следующего элемента списка.
}
while ( ptr2 != NULL) // обход второго списка.
{
ptr2 -> x = 10;
ptr2 = ptr2 -> Next;
}
system("pause");
return 0 ;
} |
|
По идее, такие же методы (как getHead()), нужно добавить и для извлечения razmer и Tail.