МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||
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
|
||||||||
|