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


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


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


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


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


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


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


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


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


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



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




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

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

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

  

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


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