- •Объектно-ориентированное программирование.
- •Методические указания к лабораторным работам Омск 2007
- •Лабораторная работа 1
- •Задания к лабораторной работе 1
- •Лабораторная работа 2 конструкторы и деструкторы
- •Задания к лабораторной работе 2
- •Лабораторная работа 3 наследование
- •Задания к лабораторной работе 3
- •Лабораторная работа 4 полиморфизм. Перегрузка операций и функций
- •Задания к лабораторной работе 4
- •Лабораторная работа 5 дружественные функции
- •Void ff(...) тело функции .
- •Задания к лабораторной работе 5
- •Библиографический список
- •Содержание
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
«Омский государственный технический университет»
Шафеева О.П.
Объектно-ориентированное программирование.
С++
Методические указания к лабораторным работам Омск 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);
}