# Член-функции. Конструктори и деструктор. Модификатори за достъп. Капсулация. ## Член-функции. Член-функциите са функции, които работят с член-данните на обекта от дадена структура. ```c++ struct Point { int x; int y; }; bool isInFirstQuadrant(const Point& p) { return p.x >= 0 && p.y >= 0; } void revert(Point& p) { p.x = -p.x; p.y = -p.y; } int main() { Point p1 = {3, 4}; Point p2 = {-9, 8}; cout << isInFirstQuadrant(p1) << endl; cout << isInFirstQuadrant(p2) << endl; } ``` Може функцията да бъде член-функция: ```c++ struct Point { int x; int y bool isInFirstQuadrant() const { return x >= 0 && y >= 0; } void revert() { x = -x; y = -y; } }; int main() { Point p1 = {3, 4}; Point p2 = {-9, 8}; cout << p1.isInFirstQuadrant() << endl; cout << p2.isInFirstQuadrant() << endl; } ``` # **Член-функциите**: - Работят с член-данните на класа. - Извикват се с обект на класа - Компилаторът преобразува всяка **член-функция** на дадена структура в обикновена функция с уникално име и един допълнителен параметър –**указател към обекта**. **Константни член-функции**: - Не променят член-данните на структурата. - Оказва се чрез записването на ключовата дума **const** в декларацията и в края на заглавието в дефиницията им - Могат да се извикват от константни обекти. ## Конструктори и деструктор. **Жизнен цикъл на обект**: - Създаване на обект в даден scope – заделя се памет и член-данните се инициализират. - Достига се до края на скоупа(област). - Обектът и паметта, която е асоциирана с него се разрушава. **Конструктор**: - Извиква се веднъж - при създаването на обекта. - Не се оказва експлицитно тип на връщане (връща констатна референция). - Има същото име като класа. **Деструктор**: - Извиква се веднъж - при изтриването на обекта. - Не се оказва експлицитно тип на връщане. - Има същото име като класа със симовла '~' в началото. ```c++ #include using namespace std; struct Test { Test() { cout << "Object is created" <