Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






STL та об’єктно-орієнтоване програмування

Може скластися враження, що бібліотека STL, яка мало використовує успадкування та зовсім не використовує віртуальних функцій, не має прямого стосунку до об’єктно-орієнтованого програмування. Це не так. По-перше, у бібліотеці STL систематично використовуються такі основоположні властивості об’єктно-орієнтованих систем програмування, як абстракція (інкапсуляція) даних і поліморфізм (перевантаження) методів та операцій. Крім того, систематично вико­ристовуючи шаблони та підтримуючи програмування з використання набору універсальних настроювальних, високоефективних, добре сконструйованих компонентів, STL суттєво полегшує складання, налагодження та модифікацію об’єктно-орієнтованих програм мовою С++. Нарешті, автори STL мають намір у наступних версіях бібліотеки ширше використовувати похідні класи та віртуальні функції, вважаючи, що це дозволить їм досягти таких удосконалень.

· Розробити контейнери, які можуть зберігати об’єкти різних типів одночасно (неоднорідні контейнери).

· Уникати «розбухання» коду за рахунок необхідності породження у програмах кількох однакових контейнерів: якщо у деякій програмі одночасно використовуються контейнери list<int>, list<string>, list<vector<int>> і т. ін., то у її EXE–файлі буде породжено кілька варіантів коду класу list, які не дуже розрізнятимуться між собою.

· Розглянемо простий приклад програми, в якій компоненти STL використовують успадкування та віртуальні функції. У прикладі розглядається програма, яка малює на екрані геометричні об’єкти. Вона складається з таких компонентів:

· управління екраном — програми та структури даних нижнього рівня, які забезпечують зображення на екрані точок і прямих ліній;

· бібліотеки форм — набір певних геометричних форм (коми, пря­мокутники і т. ін.), а також стандартних програм для роботи з ними;

· прикладної програми, яка вирішує поставлену задачу: виконує зображення «морди» та переміщення його по екрану.

#include <vector.h>

#include <algo.h>

#include <shape.h>

class myshape: public rectangle {

//Визначення нової форми – прямокутної «морди», похідної

//класу rectangle (береться з <shape.h>)

//

line* l_eye; //ліве око

line* r_eye; //праве око

line* mouth; //рот

public:

myshape (point, point);

void draw();

void move(int, int);

};

myshape:: myshape (point a, point b): rectangle(a,b)

{

int ll = neast().x – swest().x+1;

int hh = neast().y – swest().y+1;

l_eye = new line (point (swest().x+2,swest().y+hh*3/4),2);

r_eye = new line (point (swest().x+11-4, swest().y+hh*3/4),2);

mouth = new line (point (swest().x+2,swest().y+hh/4),11-4);

}

void myshape::draw()

//«морда» вимальовується як прямокутник з крапкою на місті

//«носа»; «очі» та «рот» вимальовуються окремо функцією

//shape_refresh.

{

rectangle::draw();

int a = (swest().x + neast().x)/2;

int b = (swest().y + neast().y)/2;

put_point(point(a,b));

};

void myshape::move (int a, int b)

//переміщення здійснюється шляхом переміщення базового

//прямокутника та вторинних об’єктів.

{

rectangle::move(a,b);

l_eye-> move(a,b);

r_eye-> move(a,b);

mouth-> move(a,b);

};

//починаються визначення, пов’язані з використанням STL.

struct CompWestX: binary_function<shape*, shape*,bool> {

bool operator()shape*p, shape*q)

//зрівнювання форм, починаючи з х-координат західного

//кінця. Функція west() є віртуальною в класі shape, так

//що результат зрівнювання залежить від того, як ця функція

//визначена для конкретної форми.

{

return p->west().x < q->west().x

}

} CompWestX;

void outputWestX(const vector<shape*>& vs)

//вивід х-координати західного кінця кожної форми vs.

{

vector<shape*>::const_iterator i;

for(i=vs.begin(); i!=vs.end(); ++i)

cout<<«х-координата західного кінця форми»

<<i — vs.begin()<<«існує»<<(*i-> west().x)<< end1;

};

//кінець визначень, пов’язаних з використанням STL.

int main()

{

//початок, взятий з книги Stroustrup по C++.

screen_init();

shape* p1 = new rectangle (point(0,0),point (10,10));

shape* p2 = new line(point (0,15),17)

shape* p3 = new myshape (point(15,10),point (27,18));

shape_refresh();

p3->move(-10,-10);

stack(p2,p3);

stack(p1,p2);

shape_refresh();

//Тут починається нова частина, в якій використовується

//STL. vector <shape*> vs;

vs.push_back(p1);

vs.push_back(p2);

vs.push_back(p3);

//горизонтальне переміщення 20 об’єктів за допомогою

//ітератора STL.

vector <shape*>::iterator i;

for(i=vs.begin(); i!=vs.end(); ++i)

(*(*i)).move (20,0);

shape_refresh();

//використання параметричного алгоритму упорядкування

//об’єктів outputWestX(vs);

cout<<упорядкування об’єктів за х-координатами із західного

<<кінця.<< end1;

sort(vs.begin(),vs.end(),compWestX);

cout<<після сортування<< end1;

outputWestX(vs);

screen_destroy();

}

Видача прикладу:

Спочатку видаються форми, які розміщуються в їх початкових позиціях:

*************

* *

* ** ** *

***************** *

* * *

* *

* ********* *

* *

*********** *************

* *

* *

* *

* *

* *

* *

* *

* *

* *

***********

Потім видані фігури зміщуються, утворюючи видачу:

***********

* *

* *

* *

* *

* *

* *

* *

* *

* *

***********

*****************

*************

* *

* ** ** *

* *

* * *

* *

* ********* *

* *

*************

Перемістивши ці фігури на 20 позицій по горизонталі, отримаємо:

***********

* *

* *

* *

* *

* *

* *

* *

* *

* *

***********

*****************

*************

* *

* ** ** *

* *

* * *

* *

* ********* *

* *

*************

Остання частина програми видає таку інформацію:

х-координата західного кінця форми 0 є 26

х-координата західного кінця форми 1 є 23

х-координата західного кінця форми 2 є 25

сортування об’єктів за х-координатами їх західного кінця

після сортування.

х-координата західного кінця форми 0 є 23

х-координата західного кінця форми 1 є 25

х-координата західного кінця форми 2 є 26




Переглядів: 275

<== попередня сторінка | наступна сторінка ==>
Алокатори | Виберіть одну правильну відповідь. При виникненні мозаїчного організму, на якому етапі розвитку порушення?

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.008 сек.