Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт до лабораторної роботи 2.docx
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
163.65 Кб
Скачать

Звіт до лабораторної роботи №2

за курсом «Програмування»

студента групи ПС-11-1

Лягушина Павла

Дніпропетровськ

2012

Зміст

1. Постановка задачі 3

2. Опис розв’язку 4

3. Вихідний текст програми розв’язку задачі 8

4. Опис інтерфейсу (керівництво користувача) 13

5. Опис тестових прикладів 14

6. Аналіз помилок (опис усунення зауважень) 16

1. Постановка задачі

Загальне завдання:

Розробити об’єктно-орієнтовану бібліотеку для роботи зі структурами даних за однією з нижченаведених тем у відповідності з нижченаведеними вимогами. Властивості та методи для класів розробити у відповідності з відомими визначеннями відповідних структур даних. Скласти тести для перевірки працездатності бібліотеки. Скласти програму, що демонструє можливості розробленої бібліотеки.

В незалежності від індивідуального варіанта повинні бути реалізовані наступні можливості:

  1. Реалізація методів ініціалізації (конструктор по замовчуванню та конструктор з параметрами), копіювання (конструктор копіювання), індексації (перевантаження []), присвоювання (перевантаження =), візуалізації, збереження (на диск) та відновлення, діалогового керування, "розумного доступу" (перевантаження ->), а також псевдо змінних (забезпечення можливості виду: f(x)=const).

  2. Перевантаження (спільне використання) потокового введення/виведення. (введення з файл, виведення в файл)

  3. Створення та використання файла бібліотеки (*.LIB).

  4. Повторне використання класів без їх перекомпіляції (ReUse).

  5. Застосування вказаної структури даних для розв’язання типової задачі.

Результати виконання лабораторної роботи повинні бути викладені у вигляді звіту. Загальні вимоги до звіту – у файлі (lab_treb.doc)

В ході демонстрації роботи, програма дозволяє користувачеві в діалоговому режимі (за допомогою меню) виконувати операції над відповідними структурами даних.

Індивідуальне завдання:

Множини (додавання елемента до множини, видалення елемента з множини, перевірка наявності елемента в множині, об’єднання множин, перетин множин).

2. Опис розв’язку

Спочатку створили проект під назвою «Проект». Натискаємо правою клавішею миші у полі «Обозреватель решений» на папку «Файлы исходного кода». Вибираємо «Добавить» => «Создать элемент». Створюємо два нових файли:

  • Set.cpp – в цьому файлі будемо описувати функції – члени класу Set

  • Main.cpp – в цьому файлі будемо визивати функції - члени класу Set

Після цього натискаємо правою клавішою миші у полі «Обозреватель решений» на папку «Заголовочные файлы». Вибираємо «Добавить» => «Создать элемент». Створюємо нових файл Set.h для того, щоб описувати виконати оголошення функцій класу Set.

Натискаємо двічі ліву клавішу миші на ім’я файлів для того, щоб вони з’явилися у полі і починаємо їх редагувати.

Спочатку робимо оголошення функцій класу Set у файлі Set.h. Вони будуть всі мати тип доступу public. Клас Set матиме 2 поля: size та array, тобто які відповідають за розмір множини та масиву, який зберігатиме елементи класу множини. Описуємо конструктор змовчування, конструктор з параметрами та конструкт копіювання, деструктор. Вони потрібні для ініціалізації об’єктів класу Set, тобто задання початкових значень. Оголошуємо функції члени класу:

void Enter(); //введення множини

void Show(); // виведення множини

void Union(Set, Set); // об’єднання множин

void intersection(Set, Set); // перетин множин

void add(); // додавання елемента за його номером

void extract(); // видалення елемента за його номером

void check(); // перевірка елемента на приналежність даній множині

void operator = (Set); // перевантаження оператора присвоєння

int operator [] (int i); // перевантаження індексації

friend istream& operator>>(istream & stream, Set & с); // перевантаження введення

friend ostream& operator<<(ostream & stream, Set & с); // перевантаження виведення

Set *Set :: operator -> ()// перевантаження «розумного покажчика»

Після цього переходимо до файлу Set.cpp, в якому будемо описувати данні функції. Описуємо всі функції в даному файлі, при цьому підключаємо файл Set.h в Set.cpp і main.cpp.

Переходимо до файлу main.cpp. В ньому виконуємо різні дії над множиною чисел, які введені.

Теоретичні відомості:

В об'єктно-орієнтованому програмуванні конструктор класу (від англ. constructor, деколи скорочують ctor) — спеціальний блок інструкцій, який викликається при створенні об'єкта.

Конструктор схожий з методом, але відрізняється тим, що не має явним чином визначеного типу даних, що повертаються, не успадковується і, здебільшого, має різні правила для модифікаторів. Конструктори часто виділяються тим, що мають однакове ім'я з іменем класу, в якому їх оголошено. Їхня задача — ініціалізувати члени об'єкта та визначити інваріант класу.

В більшості мов конструктор може бути перевантаженим, що дозволяє використовувати кілька конструкторів в одному класі, причому кожен конструктор має різні параметри. Деякі мови розрізняють кілька особливих типів конструкторів:

  • Типовий конструктор — конструктор, що не приймає аргументів.

  • Конструктор копіювання — конструктор, що приймає в якості аргументу об'єкт того ж класу, або посилання на нього.

Перевантаження операторів — в програмуванні один із засобів реалізації поліморфізму, що полягає в можливості одночасного існування в одній зоні видимості декількох різних варіантів застосування операторів, що мають одне й те саме ім'я, але різні типи аргументів, до яких вони застосовуються.

Синтаксис перевантаження операторів дуже схожий на визначення функції з ім'ям operator @, де @ - це ідентифікатор оператора (наприклад +, -, <<, >>).

Public, private и protected – это модификаторы доступа, а не видимости, как ошибочно думают некоторые. Private члены видны снаружи класса, но не доступны.

Public – доступ открыт всем, кто видит определение данного класса.

Private – доступ открыт самому классу (т.е. функциям-членам данного класса) и друзьям (friend) данного класса, как функциям, так и классам.

Protected – доступ открыт классам, производным от данного.

Далее приведены примеры доступа с указанием какие поля в каких местах программы доступны.

STL операції введення-виведення виконуються за допомогою потоків даних. Потік - спеціальний об'єкт, властивості якого визначаються класом.

cin і cout - глобальні об'єкти потоків введення і виведення.

Для потоків введення і виведення визначені оператори << і >> для каскадної форматованих операцій запису даних у потік і читання даних з потоку.

cout << 3;

cin >> var;

Перевантаження операторів форматованого введення-виведення в потоки STL не може бути виконано всередині самих класів потоків. Внесення модифікацій в STL заборонено Стандартом.

З цієї ж причини оператори введення-виведення користувацьких типів не можуть бути оголошені друзями класів потоків, хоча можуть бути друзями самих користувальницьких класів. Об'єкти потоків жодним чином не пов'язані з користувацькими типами даних. Для перевантаження операторів введення-виведення слід оголошувати їх поза класом. Оператори форматованого введення-виведення повині повертати посилання на потік.

Оператор continue тоже предназначен для прерывания циклического процесса, организуемого операторами for, while, do-while. Но в отличае от оператора break, он не прекращает дальнейшее выполнение цикла, а только немедленно переходит к следующей интерации того цикла, в теле которого он оказался. Он как бы имитирует безусловный переход на конечный оператор цикла, но не за ее пределы самого цикла.

Механизм классов в C++ позволяет пользователям определять собственные типы данных. По этой причине их часто называют пользовательскими типами. Класс может наделять дополнительной функциональностью уже существующий тип. Так, например, IntArray, введенный в главе 2, предоставляет больше возможностей, чем тип "массив int". С помощью классов можно создавать абсолютно новые типы, например Screen (экран) или Account (расчетный счет). Как правило, классы используются для абстракций, не отражаемых встроенными типами адекватно.