Отчет_4 (Лабораторная работа №4)
Описание файла
Файл "Отчет_4" внутри архива находится в следующих папках: Лабораторная работа №4, Лаба4. Документ из архива "Лабораторная работа №4", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "Отчет_4"
Текст из документа "Отчет_4"
Московский государственный технический университет
им. Н.Э. Баумана
Лабораторная работа №4
по курсу ПППО
«Наследование, виртуальные функции и абстрактные классы»
Вариант №8
7
(количество листов)
Выполнил:
студент группы ИУ5-61
Забаева А.
МОСКВА 2008
-
Цель работы
Целью лабораторной работы является дополнительное изучение оболочки (IDE) системы программирования BC 3.1 C++ , способов наследования классов, использование виртуальных функций, понятий абстрактного класса и виртуального вызова функций. Студенты создают свои классы и исследуют механизмы вызова виртуальных функций. Учатся проектировать собственные классы и отображать результаты на диаграммах классов и объектов.
Код задания: 1B, 2.2В, 3.1В
1B, 2.3В, 3.3В
-
Порядок работы
-
Продолжить изучение оболочки BC 3.1 C++ в интерактивном режиме( всех пунктов меню и окон настройки работы оболочки)
-
Составить диаграммы классов своей программы
-
Составление блок-схемы и написание программы, состоящей из двух исходных файлов.
-
Составить диаграмму объектов собственной программы
-
Освоить редактирование текстов в среде оболочки для много модульных программ, используя броузер классов для поиска необходимых модулей.
-
Создать и грамотно настроить проектный файл для программы ЛР, во втором файле должна быть выделена функция для вывода справки о программ (на COUT) с номером варианта, группой и ФИО студента.
-
Отладить программу с помощью отладчика с просмотром объектов классов
-
Сформировать листинг программы и листинг результатов
-
Оформить отчет по ЛР.
-
Перечень ошибок
Неверное объявление переменных, отсутствие подключаемой библиотеки в каталоге Include, неверное указание метода new, неверное объявление прототипа внешней функции.
-
Диаграмма классов.
Object – абстрактный базовый класс для всех объектов
Функции:
isA – возвращает ID класса
isEqual – определяет равен ли объект другому
printOn – отображает объект
Abstr, Deriv1, Deriv2, Deriv3 - четыре собственных класса (Absrt, Deriv1 ,Deriv2 и Deriv3 названия классов нельзя изменять), связанные следующим образом: Absrt - абстрактный класс, наследованный от Object ( из classlib); Deriv1 - наследуется от Absrt, Deriv2 наследуется от Deriv1, Deriv3 наследуется от Deriv1.
Container – абстрактный класс родитель всех классов, включает все классы способные содержать 0 или более элементов
Collection – абстрактный класс “коллекционных” структур
List – класс списка
Функции:
add – добавляет элемент
detach – удаляет объект
initIterator- создаёт итератор
flush – удаление всех объектов из списка
ListIterator – итератор списка
Функции
current – возвращает ссылку на текущий объект
++ - увеличивает значение итератора на 1
restart – перемещает итератор в первую непустую точку списка
-
Диаграмма объектов
-
Листинг программы
-
Файл main.cpp:
#include <iostream.h>
#include <conio.h>
#include <list.h>
#include "classes.h"
extern void About();
const Size=5;
void main()
{
int i;
Deriv1 d1;
Deriv2 d2;
Deriv3 d3;
cout<<"[Print values with class methods]"<<endl;
d1.print();
d2.print();
d3.print();
cout<<endl<<"[Print values with points]"<<endl;
Deriv1 *pd1= &d1;
Deriv2 *pd2= &d2;
Deriv3 *pd3= &d3;
pd1->print();
pd2->print();
pd3->print();
cout<<endl<<"[Print values with point of abstract]"<<endl;
Absrt *pa1;
pa1=&d1;
pa1->print();
pa1=&d2;
pa1->print();
pa1=&d3;
pd3->print();
cout<<endl<<"Press any key to continue..."; getch();
cout<<endl<<endl<<"[Create list]"<<endl<<endl;
List ListDerive;
for(i=0;i<Size;i++)
ListDerive.add(*new Deriv1(i-0.5));
for(i=0;i<Size;i++)
ListDerive.add(*new Deriv2(i-0.5));
for(i=0;i<Size;i++)
ListDerive.add(*new Deriv3(i-0.5));
cout<<"[Print values of elements with printOn]"<<endl;
ListIterator iA(ListDerive);
while(iA)
{
iA.current().printOn(cout<<endl);
iA++;
}
cout<<endl<<endl<<"Press any key to continue..."; getch();
cout<<endl<<endl<<"[Print values of elements with print]"<<endl<<endl;
iA.restart();
while(iA)
{
((Absrt*) &iA.current())->print();
iA++;
}
cout<<endl<<"Press any key to continue..."; getch();
iA.restart();
while(iA)
{
if(strcmp(iA.current().nameOf(),"Deriv3")!=0)
{
Absrt &M1=Absrt((Absrt&)iA++);
ListDerive.detach(M1,TShouldDelete::Delete);
}
else
iA++;
}
cout<<endl<<endl<<"[Print after delete Deriv1 and Deriv2]"<<endl;
ListDerive.printOn(cout);
About();
}
-
Файл add.cpp:
#include <iostream.h>
void About(void)
{
cout<<endl<<"IU5-61 Var.8"<<endl<<"Zabaeva A.";
}
-
Файл classes.h:
-
#include <iostream.h>
-
#include <conio.h>
-
#include <strng.h>
-
#include <list.h>
-
#include <shddel.h>
-
class Absrt : public Object
-
{
-
public:
-
double Data;
-
Absrt() {Data=0;}
-
virtual void print(){};
-
virtual void printOn(ostream& o) const {};
-
hashValueType hashValue() const {};
-
classType isA() const {};
-
int isEqual(const Object& testObject) const {};
-
int isSortable() const {};
-
char *nameOf() const {};
-
};
-
class Deriv1 : public Absrt
-
{
-
public:
-
Deriv1() {}
-
Deriv1(double d)
-
{
-
Data=d;
-
}
-
virtual void print() {cout<<"Deriv1: Data="<<Data<<endl;}
-
virtual void printOn(ostream& o) const {o<<Data;}
-
char *nameOf() const {return "Deriv1";}
-
};
-
class Deriv2 : public Deriv1
-
{
-
public:
-
Deriv2() {}
-
Deriv2(double d)
-
{
-
Data=d;
-
}
-
virtual void print() {cout<<"Deriv2: Data="<<Data<<endl;}
-
char *nameOf() const {return "Deriv2";}
-
};
-
class Deriv3 : public Deriv1
-
{
-
public:
-
Deriv3() {}
-
Deriv3(double d)
-
{
-
Data=d;
-
}
-
virtual void print() {cout<<"Deriv3: Data="<<Data<<endl;}
-
char *nameOf() const {return "Deriv3";}
-
};
Листинг результатов работы
7