Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oop12.doc
Скачиваний:
17
Добавлен:
06.02.2016
Размер:
1.13 Mб
Скачать

4. Требования к отчету

1. Обоснование выбора структуры памяти класса и его интерфейса.

2. Блок-схемы алгоритмов функций обработки (ПО3).

3. Описание класса + схемы (ПО2, ПО4).

4. Результаты тестирования класса.

5. Заключение.

ЛАБОРАТОРНАЯ РАБОТА №3

ПЕРЕГРУЗКА ОПЕРАЦИЙ

Цель:Получить практические навыки работы с механизмом перегрузки операций для различных динамических структур данных.

1. Общие указания

1.1. Перегрузка операций

Для перегрузки операции для класса в С++ используется следующий синтаксис:

<Тип>  operator <операция>(<входные параметры>) {   <операторы>; }

где < Тип > - тип, возвращаемый функцией;

operator - ключевое слово;

< операция > - перегружаемая операция.

В языке С++ имеются следующие ограничения на перегрузку операций:

  • С++ не различает префиксную и постфиксную формы ++ и - -;

  • переопределяемая операция должна присутствовать в языке (например, нельзя определить операцию с символом #);

  • нельзя переопределить операторы, заданные следующими символами . * :: ?  ;

  • переопределённые операции сохраняют свой изначальный приоритет.

1.2. Динамические структуры данных: стек, очередь список

Поскольку с динамическими структурами данных вы уже знакомы из предыдущего курса по программированию, приведем только требования к памяти и интерфейсу классов этих структур.

СТЕК:

обычно реализуется с помощью массива. Реализует концепцию LIFO (Last In First Out), то есть элемент, который добавили в стек последним выйдет из него первым.

Память класса:

[private:]

enum {EMPTY = -1, FULL = 999};// Нижняя и верхняя границы стека

<тип> <имя>[FULL + 1]; // Массив для хранения данных (стек)

int top; // Указатель на вершину стека

Методы класса

Обязательными есть конструктор[ы], деструктор;

Необходимыми есть: добавление элемента void Push(char c); выталкивание элемента char Pop(); очистка стека; проверка существования элементов в стеке; проверка на переполнение стека; определение количества элементов в стеке;

3 функции перегрузки, в соответствии с вариантом задания.

Пример (простейший стек)

#include <iostream>

using namespace std;

////////////////////////////////////////////////////////////////

class Stack

{

private:

enum { MAX = 10 }; //(non-standard syntax)

int st[MAX]; //stack: array of integers

int top; //number of top of stack

public:

Stack() //constructor

{ top = 0; }

void push(int var) //put number on stack

{ st[++top] = var; }

int pop() //take number off stack

{ return st[top--]; }

};

////////////////////////////////////////////////////////////////

int main()

{

Stack s1;

s1.push(11);

s1.push(22);

cout << “1: “ << s1.pop() << endl; //22

cout << “2: “ << s1.pop() << endl; //11

s1.push(33);

s1.push(44);

s1.push(55);

s1.push(66);

cout << “3: “ << s1.pop() << endl; //66

cout << “4: “ << s1.pop() << endl; //55

cout << “5: “ << s1.pop() << endl; //44

cout << “6: “ << s1.pop() << endl; //33

return 0;

}

ОЧЕРЕДЬ:

представляет концепцию FIFO (First In First Out), то есть элемент, который добавили в очередь первым, первым ее и покинет. Реализуется с помощью динамического массива или списка.

Память класса:

[private:]

<тип> *<имя>; // Очередь

unsigned MaxLength; // Максимальный размер очереди

unsigned QueueLength// Текущий размер очереди

Методы класса

Обязательными есть конструктор[ы], деструктор;

Необходимыми есть добавление элемента в очередь, удаление элемента из очереди, получение текущей длины очереди, получение максимальной длины очереди, установка максимальной длины очереди, путая/заполненная, очистка очереди.

3 функции обработки, в соответствии с вариантом задания.

СПИСОК:

это линейный набор ссылающихся на себя структур, называемых узлами, и объединенных указателем-связкой. Доступ к связующим узлам производится через связывающий указатель, хранящийся в каждом узле. Список не имеет фиксированного размера - он может расти или сокращаться по мере необходимости. Эта его особенность становится существенной, если число объектов в списке неизвестно до времени выполнения.

Элемент(узел) данных списка может быть представлен, например, структурой

struct <имя_struct>

{

<тип> <имя>;[<тип> <имя>;] // Данные

<имя_struct>* Next; // Адрес следующего элемента списка

};

Память класса:

[private: ]

<имя_struct>*<имя>; // Адрес головного элемента списка (в нашем примере типа структура)

<тип> <имя>; // Количество элементов списка

Методы класса

Обязательными есть конструктор[ы], деструктор;

Необходимыми есть добавление элемента в список, удаление элемента списка, распечатка содержимого списка, получение количества элементов, находящихся в списке,

3 функции обработки, в соответствии с вариантом задания.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]