Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 04 / README.md
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 (темата е разгледана в час)