Скачиваний:
19
Добавлен:
01.05.2014
Размер:
148.99 Кб
Скачать

Министерство образования и науки рф

Санкт-Петербургский государственный электротехнический Университет «ЛЭТИ»

кафедра математического обеспечения ЭВМ

Отчет

по лабораторной работе №1

«Программирование контейнерных классов»

по дисциплине

«Объектно-ориентированные технологии разработки программного обеспечения»

Выполнил: студент гр. 3341 Рыжок М.С.

Проверил : доцент Спицин А.В.

Санкт-Петербург 2007

1. Разработка программ в среде MS Visual C++.

    1. Настройка среды. Выполнение индивидуального задания.

Откомпилировать и выполнить проект TrialRun.

Результат компиляции: TrialRun.exe - 0 error(s), 0 warning(s)

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

Рисунок 1

Индивидуальное задание:

  • Написать классы для создания графических объектов: окружность, эллипс, текст, текст в эллипсе.

  • Классы должны иметь общий абстрактный базовый класс Shape с чистыми виртуальными функциями.

  • Необходимо использовать множественное наследование. В классах должны быть предусмотрены виртуальные функции для вывода информации об объектах в поток, а Shape должен иметь дружественный перегруженный оператор <<.

  • Исходный текст должен быть разделен на три файла .h, .cpp и .cpp с тестовой программой.

Иерархия классов представлена на рисунке 2

  • Базовый чисто абстрактный класс Shapeопределяет интерфейс.

  • Класс ShapePositionреализует некоторые методы интерфейса и определяет методы работы с заданием и изменением позиции в рабочей области.

  • Наследование CCircleиCTextотShapePositionсделано виртуальным, так как классCEllipseTxtмножественно наследован отCCircleиCText. Виртуальное наследование позволяет избежать двойного включения базового класса,

Объявления всех классов находятся в файлах с расширением .h, определение всех классов кромеShapeнаходятся в файлах с расширением .cpp.

Тестовая программа в файле TestProgram.cpp.

Текст классов и тестовой программы

Файл Shape.H

class Shape

{

public:

virtual int getNumType()=0;

virtual void display(std::ostream& os) = 0;

virtual int GetX() const=0;

virtual int GetY() const=0;

virtual void SetX(int _X)=0;

virtual void SetY(int _Y)=0;

virtual void Move(int dx,int dy)=0;

virtual ~Shape(){}

private:

friend std::ostream& operator<<(std::ostream& os, Shape* ob)

{

ob->display(os);

return os;

}

};

Файл ShapePosition.h

class ShapePosition:public Shape

{ int X;

int Y;

public:

ShapePosition();

ShapePosition(int _X,int _Y);

int GetX() const;

int GetY() const;

void SetX(int _X);

void SetY(int _Y);

void Move(int dx,int dy);

};

Файл ShapePosition.cpp

class ShapePosition:public Shape

{ int X;

int Y;

public:

ShapePosition();

ShapePosition(int _X,int _Y);

int GetX() const;

int GetY() const;

void SetX(int _X);

void SetY(int _Y);

void Move(int dx,int dy);

};

Файл CCircle.h

class CCircle : virtual public ShapePosition

{

int XRad;

public:

CCircle();

CCircle(int _X, int _Y, int _XRad);

void SetXRad(int _XRad);

int GetXRad() const;

double GetArea() const;

int getNumType();

void display(std::ostream& x);

virtual ~CCircle();

};

Файл CCircle.cpp

CCircle :: CCircle():ShapePosition()

{ XRad = 0; }

CCircle :: CCircle(int _X, int _Y, int _XRad):ShapePosition(_X,_Y)

{ XRad = _XRad; }

CCircle ::~CCircle()

{}

void CCircle :: SetXRad(int _XRad)

{ XRad = _XRad;}

int CCircle :: GetXRad() const

{

return XRad;

}

double CCircle :: GetArea() const

{

return M_PI * XRad * XRad;

}

int CCircle :: getNumType()

{

return 2;

}

void CCircle ::display(ostream &os)

{

os << "Class CCircle Information :" << endl <<

"X :" << GetX() << endl <<

"Y :" << GetY() << endl <<

"Radius :" << GetXRad() << endl <<

"Area :" << GetArea() << endl;

}

Соседние файлы в папке Лабораторная работа 13