Отчет_лаб2 (Лабораторная работа №2)
Описание файла
Файл "Отчет_лаб2" внутри архива находится в следующих папках: Лабораторная работа №2, lab2. Документ из архива "Лабораторная работа №2", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "Отчет_лаб2"
Текст из документа "Отчет_лаб2"
Московский государственный технический университет им. Н.Э.Баумана
_________________________________________________________________
Лабораторная работа №2 по дисциплине ПППО
«Изучение классов ARRAY и ARRAYITERATOR »
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-63 | _____________________ |
Абламцев Д.М. | "__"_____________2006 г. |
Москва - 2006
________________________________________________________________
-
Цель работы
Целью лабораторной работы является продвинутое изучение оболочки (IDE) системы программирования BC 3.1 C++ и классов с массивами (ARRAY и ARRAYITERATOR) библиотеки CLASSLIB, изучение классов семейства ARRAY и приобретение навыков работы со стандартными классами (файлы ARRAY.CPP , ARRAY.H, ABSTARRY.CPP и ABSTARRY.H), знакомство с понятиями абстрактный класс и наследование (на примере классов OBJECT и ABSTARRAY.
Код задания: 1В, 2.1В, 3.2В, 4.5В
-
Требования к работе
При выполнении лабораторной работы в изложенном ниже порядке должны быть реализованы следующие требования:
Обязательные требования без выполнения которых сдать ЛР невозможно:
-
Описать массивов А и В (см. 1-й пункт вариантов);
-
Ввести данные с консоли типа строка или дата или время ( стандартные классы: String – описание в файле strng.h, или Date - описание в файле ldate.h, или Time -описание в файле Ltime.h ) и занести их в массив A (см. 2-й пункт вариантов). Минимально в массив А заносится 5 элементов.
-
Распечатать массив А с помощью метода printContentsOn;
-
Распечатать массив А с помощью цикла и метода printOn;
-
Распечатать пустой массив В с помощью метода printContentsOn;
-
Сформировать массив В как копию массива А (необходим цикл копирования);
-
Распечатать заполненный массив В с помощью метода printContentsOn;
-
Распечатать массивы А и В с помощью цикла и использования класса ARRAYITERATOR для этих массивов. Нужно описать итераторы и использовать функции/методы этого класса - printOn, restart и current.
-
Выполнить добавление одного элемента массива и снова его распечатать (см. 3-й пункт вариантов).
-
Выполнить удаление одного элемента массива и снова его распечатать (см. 4-й пункт вариантов). На основе:
-
Нового порожденного от Array класса, в котором делается доступным метод removeEntry из класса AbstractArray. Там он защищен – protected;
-
Использованием метода detach из класса AbstractArray при указании типа удаления TShouldDelete :: Delete для 2-го параметра. Для уточнения процедур удаления и добавления нужно посмотреть файлы: Abstarry.h, Abstarry.cpp, Shddel.h, Array.h.
-
Дополнительные требования:
-
Распечатать массивы с помощью нового перегруженного метода для нового класса наследника от ARRAY (<<) – PrintMas(); Новый класс назвать MyArray.
-
Перегрузить самостоятельно операцию “=” для присваивания массивов( A = B; - элементы непустого массива А при выполнении операции должны быть удалены ) или операцию “+” для сложения массивов ( C = A + B; - интерпретируется так: в новый массив С последовательно включаются элементы массива А и В, а элементы непустого С предварительно при выполнении этой операции должны быть удалены).
-
Выполнить перегрузку метода printOn для элементных объектов (String, Date, Time), включаемых в массив. Для этого на основе элементного класса нужно создать новый класс c перегруженным методом. Править исходные тексты файлов BC++ не допускается. Продемонстрировать распечатку массива с новыми элементами с помощью функции printContentsOn.
-
Перечень ошибок исправленных при отладке программы
Не выделение памяти для массива В, трудности с перегрузкой оператора =.
-
Диаграмма классов ARRAY и ARRAYITERATOR
Object
Error
Sortable
Association
ContainerIterator
AbstractArray
Btree
List
DoubleList
HashTable
Bag
ArrayIterator
DoubleListIterator
SortedArray
Array
HashTableIterator
BtreeIterator
ListIterator
5.Листинги программ.
a) lab2.cpp
#include <iostream.h>
#include <Abstarry.h>
#include <iomanip.h>
#include <ltime.h>
#include <array.h>
#include <shddel.h>
#include <stdlib.h>
#include "info.h"
class _CLASSTYPE MyTime: public Time
{
public:
MyTime(unsigned char h=0, unsigned char m=0, unsigned char s=0, unsigned char ms=0):
Time(h,m,s,ms) {}
virtual ~MyTime() {};
friend istream& operator>>(istream& is, MyTime& time);
virtual void printOn( ostream _FAR & ) const;
};
class _CLASSTYPE MyArray: public Array
{
public:
MyArray(int upper, int lower=0, sizeType aDelta=0) : Array(upper,lower,aDelta) {}
virtual ~MyArray() {};
MyArray& operator=(const MyArray&);
void Delete(int loc) {removeEntry(loc);};
};
MyArray& MyArray::operator=(const MyArray& A)
{
//MyArray B(A.arraySize()-1);
for(int i=0;i<A.arraySize()-1;i++)
this->add(*(new MyTime((MyTime &)A[i])));
return *this;
}
istream& operator>>(istream& is, MyTime &time)
{
char str[9];
is >> str;
time.setHour(atoi(str));
time.setMinute(atoi(str+3));
time.setSecond(atoi(str+6));
return is;
}
void MyTime::printOn( ostream& os ) const
{
os << setfill('0') << setw(2) << hour() << ":"
<< setw(2) << minute() << ":" << setw(2) << second();
}
void main(void)
{
MyArray A(5),*B;
MyTime time;
cout << "Введите время в формате xx:xx:xx :" << endl;
for(int i=0;i<5;i++)
{
cin >> time;
A.add(*new MyTime(time));
}
cout << "Ввод закончен. Массав А сформирован." << endl;
cout << "Массив А(printContentsOn):" << endl;
A.printContentsOn(cout);
cout << "Массив А(printOn)" << endl;
for(i=0;i<A.arraySize()-1;i++)
cout << A[i] << endl;
B=new MyArray(A.arraySize()-1);
cout << "Пустой массив В(printContentsOn):" << endl;
B->printContentsOn(cout);
*B=A;
cout << "Массив В=А(printContentsOn):" << endl;
B->printContentsOn(cout);
ArrayIterator AI=ArrayIterator(A);
AI.restart();
cout << "Массив А(ArrayIterator):" << endl;
for(i=0;i<A.arraySize()-1;i++)
{
AI++.printOn(cout);
cout << endl;
}
cout << "Добавление последнего элемента в А:" << endl;
cin >> time;
A.addAt(*new MyTime(time), A.arraySize()-1);
A.printContentsOn(cout);
cout << "Удаление первого элемента из А:" << endl;
A.Delete(0);
A.printContentsOn(cout);
}
b) info.h
#ifndef __INFO_H_
#define __INFO_H_
void PrintInfo(void);
#endif
c) info.cpp
#include <iostream.h>
void PrintInfo(void)
{
cout << "Абламцев Д.М." << endl;
cout << "Группа ИУ5-63" << endl;
cout << "Вариант №1" << endl;
}
5