Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

22.4.4. Зберігання у списку об'єктів класу

Розглянемо приклад, у якому список використовують для зберігання об'єктів типу myClass. Звернемо Вашу увагу на те, що для об'єктів типу myClass перевантажено оператори "<", ">", "!=" і "==". Для деяких компіляторів може виявитися зайвим визначення всіх цих операторів, або ж доведеться додати деякі інші з них. У бібліотеці STL ці функції використовуються для визначення впорядкування і рівності об'єктів у контейнері. Хоча список не є впорядкованим контейнером, необхідно мати засіб порівняння елементів, який застосовується у процесі їх пошуку, сортування або об'єднання.

Код програми 22.10. Демонстрація механізму зберігання у списку об'єктів класу

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

#include <list> // Для роботи зі списками

#include <cstring> // Для роботи з рядковими типами даних

using namespace std; // Використання стандартного простору імен

class myClass { // Оголошення класового типу

int a, b;

int sum;

public:

myClass() { a = b = 0;}

myClass(int izm, int jzm) { a = izm; b = jzm; sum = ф + b;}

int getSum() { return sum;}

friend bool operator<(const myClass &a_ob, const myClass &b_ob);

friend bool operator>(const myClass &a_ob, const myClass &b_ob);

friend bool operator==(const myClass &a_ob, const myClass &b_ob);

friend bool operator!=(const myClass &a_ob, const myClass &b_ob);

};

bool operator<(const myClass &a_ob, const myClass &b_ob)

{ return a_ob.sum < b_ob.sum; }

bool operator>(const myClass &a_ob, const myClass &b_ob)

{ return a_ob.sum > b_ob.sum; }

bool operator==(const myClass &a_ob, const myClass &b_ob)

{ return a_ob.sum == b_ob.sum; }

bool operator!=(const myClass &a_ob, const myClass &b_ob)

{ return a_ob.sum != b_ob.sum; }

int main()

{

int i;

list<myClass> lst1; // Створення першого списку.

for(i=0; i<10; i++) lst1.push_back(myClass(i, i));

cout << "Перший список: ";

list<myClass>::iterator p = lst1.begin();

while(p != lst1.end()) {

cout << p->getSum() << " ";

p++;

}

cout << endl;

list<myClass> lst2; // Створення другого списку.

for(i=0; i<10; i++) lst2.push_back(myClass(i*2, i*3));

cout << "Другий список: ";

p = lst2.begin();

while(p != lst2.end()) {

cout << p->getSum() << " ";

p++;

}

cout << endl;

// Тепер об'єднуємо списки lst! і lst2.

lst1.merge(lst2);

// Відображаємо об'єднаний список.

cout << "Об'єднаний список: "; p = lst1.begin();

while(p != lst1.end()) {

cout << p->getSum() << " ";

p++;

}

cout << endl;

getch(); return 0;

}

Ця програма створює два списки об'єктів типу myClass і відображає їх вміст. Потім виконується об'єднання цих двох списків з подальшим відображенням нового вмісту остаточного списку. Отже, програма відображає на екрані такі результати:

Перший список: 0 2 4 6 8 10 12 14 16 18

Другий список: 0 5 10 15 20 25 30 35 40 45

Об'єднаний список: 0 0 2 4 5 6 8 10 10 12 14 15 16 18 20 25 30 35 40 45