Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
52
Добавлен:
10.12.2013
Размер:
33.79 Кб
Скачать

Министерство среднего и профессионального образования РФ

Пермский государственный технический университет

Кафедра АСУ

Лабораторная работа №1

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

Выполнил: Максимов С.А.

Проверил: Ноткин А.М.

Пермь 2001 г.

Лабораторная работа №1.

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

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

Основное содержание работы.

Определить и реализовать класс- абстрактный тип данных. Определить и реализовать операции над данными этого класса. Написать и выполнить консольное приложение в среде VC++ 6 для полного тестирования этого класса.

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

Вариант № 23.

.АТД- двухмерный массив (матрица) вещественных чисел. Дополнительно перегрузить следующие операции:

“()” - доступ по индексу;

“==” - проверка матриц на равенство.

“++” - транспонировать матрицу;

Реализуется класс matrix.

Поля:

  • double – элементы ;

  • int len – текущая длина списка;

  • int max – максимально возможная длина списка;

  • int cur – текущий элемент в списке;

Методы:

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

  • List(const char *C) – в список заносятся элементы строки С, список максимально возможной длины;

  • List(const char *C, int M) - в список заносятся элементы строки С, список длины М;

  • List(const List &L) – копирующий конструктор;

  • ~List() – деструктор;

  • void Input() – ввод списка с клавиатуры;

  • void Show() – вывод списка на экран;

  • int Len() – получение текущей длины списка;

  • char* Str() – получение списка;

  • int Add(const char* C) – добавление элементов С в список;

  • int GetChar() – получить текущий элемент списка;

  • void Next() – перейти к следующему элементу;

  • void Back() - перейти к предыдущему элементу;

  • void SetCur(int T) – установить текущий элемент списка;

  • List& operator+(const char C) – перегрузка операции «+», добавление элемента в список;

  • void operator--() – перегрузка операции «--»,удаление элемента из начала списока;

  • int operator==(const List &L) – перегрузка операции «==», проверка списков на равенство;

  • List& operator=(const List &L) – перегрузка операции «=»;

Определение класса.

class matrix

{

int i,k,m,n,j;

double **mas;

public:

matrix();

matrix(int M,int N);

matrix(const matrix& sh);

~matrix();

void random();

void print();

void input();

int operator==(const matrix& sd);

void operator++();

double operator()(int i,int j);

};

Обоснование.

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

Деструктор вводится для того чтобы освободить память распределенную во время создания объекта.

Оператора присваивания перегружается опять же по причине поверхностного копирования.

Реализация перегруженных операций.

Все перегруженные операции определены как функции-члены класса. Данная реализация удовлетворяет требованиям С++ и задачи.

Тестовые данные и результаты тестирования.

Для создания объекта используем все конструкторы:

List a, b(“12”), c(“1”, 30), d=b;

Полученные списки:

A -> ‘NULL’

B -> ‘12’

C -> ‘1’

D -> ‘12’

Введем список А:

a.Input(); //ввели ”65112”

Добавим элементы в начало и конец списка и удалим элемент из начала:

b+”51”

c.add(“23”)

--a

Полученные списки:

A -> ‘5123’

B -> ‘5112’

C -> ‘123’

D -> ‘12’

Сравним a c b и c c d получим что:

A = B

C  B

Тестовые данные верны, программа отлажена, работает верно.