Читайте также:
|
|
Лабораторна робота № 6.
Тема: Використання конструкторів і констант в класі при програмуванні масивів об'єктів.
Мета роботи - Отримати практичні навики створення абстрактних типів даних і перевантаження операцій в мові С++.
Короткі теоретичні відомості
Абстрактний тип даних (АТД)
АТД - тип даних, визначуваний лише через операції, які можуть виконуватися над відповідними об'єктами безвідносно до способу представлення цих об'єктів.
АТД включає абстракцію як через параметризацію, так і через специфікацію. Абстракція через параметризацію може бути здійснена так само, як і для функцій, використанням параметрів там, де це має сенс. Абстракція через специфікацію досягається за рахунок того, що операції представляються як частина типа.
Для реалізації АТД необхідне, по-перше, вибрати представлення пам'яті для об'єктів і, по-друге, реалізувати операції в термінах вибраного представлення.
Прикладом абстрактного типа даних є клас в мові С++.
Перевантаження операцій
Можливість використовувати знаки стандартних операцій для запису виразів як для вбудованих, так і для АТД.
У мові С++ для перевантаження операцій використовується ключове слово operator, за допомогою якого визначається спеціальна операція-функція.
Формат операції-функції:
тип_поверн_значення operator знак_операції (специф_параметрів) {оператори_тіла_функції}
Перевантаження унарних операції
Унарні операції ®, що перевантажуються в рамках певного класу, можуть перевантажуватися лише через нестатичну функцію без параметрів. Об'єкт класу, що викликається, автоматично сприймається як операнд.
вираз ® Z означає виклик Z.operator ® ();
Синтаксис:
тип_поверн_значення operator знак_операції(){оператори_тіла_функції}
Приклад:
class person
{
int age;
public:
void operator++(){ ++age;}
};
void main()
{
person jon;
++jon;
}
Перевантаження бінарних операцій
Бінарні операції ®, що перевантажуються усередині класу, можуть перевантажуватися лише нестатичними функціями з параметрами. Обьект класу, що викликається, автоматично сприймається як перший операнд.
вираз x®y означає виклик x.operator ® (y);
Приклад:
class person {...};
class adresbook
{
// містить як компонентні дані (поля) множину об'єктів типа
// person, що представляються як динамічний масив або список
public:
person& operator[](int); //доступ до i-го об'єкту
};
person& adresbook::operator[](int i){...}
void main()
{
adresbook persons;
person record;
record = persons [3];
}
Порядок виконання роботи
1. Вибрати клас АТД відповідно до варіанту.
2. Визначити і реалізувати в класі конструктори, деструктор, функції Input (введення з клавіатури) і Print (виведення на екран).
3. Написати програму тестування класу і виконати тестування.
4. Доповнити визначення класу заданими перевантаженими операціями (відповідно до варіанту).
5. Реалізувати ці операції. Виконати тестування.
6. Результати роботи оформити звітом.
Варіанти індивідуальних завдань
+ - додати елемент в стек;
- - витягнути елемент зі стека;
bool() - перевірка, чи порожній стек.
- - віднімання векторів (а[i]-b[i] для всіх i);
[] - доступ по індексу;
- - відняти з вектора число (vector-double).
= - привласнити всім елементам вектора значення (vector=double);
[] - доступ по індексу;
= = - перевірка на рівність;
!= - перевірка на нерівність.
() - доступ по індексу;
= = - перевірка матриць на рівність;
++ - транспонувати матрицю.
+ - додати елемент;
- - витягнути елемент;
bооl() - перевірка, чи порожня черга.
* - множення векторів (а[i]*b[i] для всіх i);
[] - доступ по індексу;
* - помножити вектор на число (vector*double).
+ - об'єднати списки (list+list);
- - - видалити елемент з початку (- -list);
= = - перевірка на рівність.
+ - складання векторів (а[і]+ b[і] для всіх і);
[] - доступ по індексу;
+ - додати число до вектора (double+vector).
+ - додати елемент в початок (char +list);
- - - видалити елемент з початку (- -list);
= = - перевірка на рівність.
+ - додати елемент в кінець (list+char);
- - - видалити елемент з кінця (типа list--);
!= - перевірка на нерівність.
[] - доступ до елементу в заданій позиції, наприклад:
int i;
char с;
list L;
c=L[i];
+ - об'єднати два списки (list+list);
!= - перевірка на нерівність.
+ - додати елемент в кінець (list+char);
- - - видалити елемент з кінця (типа list--);
= = - перевірка на рівність.
() - доступ по індексу;
* - множення матриць;
* - множення матриці на число;
* - множення числа на матрицю.
[] - видалити елемент в заданій позиції, наприклад:
int i;
list L;
L[i];
[] - додати елемент в задану позицію, наприклад:
int i;
char с;
list L;
L[с, i];
!= - перевірка на нерівність двох списків.
() - доступ по індексу;
- - різниця матриць;
- - відняти з матриці число;
= = - перевірка матриць на рівність.
() - доступ по індексу;
= - привласнити всім елементам матриці значення (matr=double);
+ - складання матриць;
+ - скласти матрицю з числом (matr+double).
* - множення векторів (а[i]*b[i] для всіх i);
[] - доступ по індексу;
* - помножити вектор на число (vector*double).
[] - доступ до елементу в заданій позиції, наприклад:
int i;
char с;
list L;
c=L[i];
+ - об'єднати два списки (list+list);
! = - перевірка на нерівність.
Дата добавления: 2015-11-26; просмотров: 173 | Нарушение авторских прав