Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
М.у. объектно-ориентир. прогр. с правкой.doc
Скачиваний:
70
Добавлен:
30.03.2015
Размер:
266.24 Кб
Скачать

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

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

Шафеева О.П.

Объектно-ориентированное программирование.

С++

Методические указания к лабораторным работам Омск 2007

Составитель: О.П. Шафеева

Включают пять лабораторных работ для изучения правил объектно-ориенти-рованного программирования: слияния элементов данных и методов при создании класса (инкапсуляция); поведения объектов при наследовании; полиморфизма в языке программирования С++.

Предназначены для изучения технологии объектно-ориентированного программирования в дисциплине «Технологии программирования» студентами специальности 23.01.01 – «Вычислительные машины, комплексы, системы и сети» и направления 23.01.00 – «Информатика и вычислительная техника»

Печатается по решению редакционно-издательского совета Омского государственного технического университета.

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

КЛАССЫ, ОБЪЕКТЫ. ФУНКЦИИ-ЧЛЕНЫ КЛАССА В ЯЗЫКЕ С++. ИНКАПСУЛЯЦИЯ

Классы в языке С++ представляют собой механизм для создания объектов. Синтаксис описания класса:

class <имя класса>

{<закрытые функции и переменные класса>

public:

<открытые функции и переменные класса>

} [список объектов] ;

В описании класса <список объектов> не является обязательным. Функции и переменные, объявленные внутри класса, становится членами этого класса. В объявлении класса используются следующие спецификаторы: public, private, protected. Режим рublic обеспечивает возможность доступа к функции, объявленной после этого ключевого слова, из других функций программы. Режим private устанавливается по умолчанию и означает закрытость переменных и функций, объявленных после этого ключевого слова. К таким переменным закрыт доступ из других функций программы, кроме функций данного класса. Спецификатор protected указывает, что элементы-данные и элементы-функции доступны для функций и элементов данного класса и производных от него классов.

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

myclass ob1, ob2;

Общая форма задания функ­ции:

<Тип> <имя класса> :: <имя функции>(<список параметров>)

{ ... // тело функции }

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

#include <iostream.h>

#include <stdlib.h>

#include <math.h>

#include <conio.h>

#include <graphics.h>

#define PI 3.1415

char ch; // глобальная переменная ch

class otr

{ int x,y,x1,y1,sx,sy; // описание класса otr

public:

void input();

void show();

void sered();

void povorot();

};

void otr :: input() // описание функции input

{ textcolor(YELLOW);

clrscr();

cout << "Введите целые координаты отрезка:\n";

cout << "в пределах: x(200,500) y(100,300) \n";

cin >> x >> y >> x1 >> y1;

}

void otr::sered() // описание функции sered

{ sx = (int)((x+x1)/2);

sy = (int)((y+y1)/2);

}

void otr::show() // описание функции show

{ int grdr = DETECT,grmd;

initgraph(&grdr,&grmd,"C:\ BC\BGI");

setbkcolor(BLUE);

setcolor(WHITE);

setlinestyle(SOLID_LINE, 0, NORM_WIDTH);

line(x, y, x1, y1);

circle(sx, sy, 3);

setlinestyle(1, 0, NORM_WIDTH);

setcolor(YELLOW);

line(sx, 0, sx, 480);

line(0, sy, 640, sy);

setcolor(GREEN);

circle(x, y, 2);

setcolor(RED);

circle(x1, y1,2);

ch = getch();

closegraph();

}

void otr::povorot() // описание функции povorot

{ float a = 0.0, r = 0.0, a1=0.0;

textcolor(YELLOW);

clrscr();

cout << "Введите вещественный угол : ";

cin >> a;

a = a*(PI/180);

a1 = atan2((float)(sy-y1),(float)(x1-sx)); // перевод старых координат

r = sqrt((x1-sx)*(x1-sx)+(sy-y1)*(sy-y1)); // в новые

x1 = (int)(sx+r*cos(a1+a));

y1 = (int)(sy-r*sin(a1+a));

x = (int)(sx-r*cos(a1+a));

y = (int)(sy+r*sin(a1+a));

}

void main() // Основная программа

{

clrscr();

otr obj;

obj.input();

obj.sered();

obj.show();

do

{ obj.povorot();

obj.show();

}

while (ch!=27);

}