blob: a3fd3d481d7db4f6b394d87143ccf3b118d37dfc (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# Член-функции. Конструктори и деструктор. Модификатори за достъп. Капсулация.
## Член-функции.
Член-функциите са функции, които работят с член-данните на обекта от дадена структура.
```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 <iostream>
using namespace std;
struct Test
{
Test()
{
cout << "Object is created" <<endl;
}
~Test()
{
cout << "Object is destroyed" <<endl;
}
int a;
int b;
};
int main()
{
while ()
{
Test t;// Object is created
if ()
{
Test t2; // Object is created
}// Object is destroyed (t2)
}//Object is destroyed (t)
}
```
## Конструктори и деструктор при влагане на обекти.
TBI (темата е разгледана в час)
|