From 84955da4564fd33447c11d12063d5ea2906f4c68 Mon Sep 17 00:00:00 2001 From: Angel Dimitriev Date: Tue, 29 Mar 2022 20:11:09 +0300 Subject: Create README.md --- Sem. 06/README.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Sem. 06/README.md diff --git a/Sem. 06/README.md b/Sem. 06/README.md new file mode 100644 index 0000000..c16dfe0 --- /dev/null +++ b/Sem. 06/README.md @@ -0,0 +1,58 @@ +# Разделна компилация. Абстракция. Копиращ конструктор и оператор= + +## Разделна компилация. + +![enter image description here](https://gamedevunboxed.com/wp-content/uploads/2019/08/image.png) + +Една програма на С++ може да бъде разбита в множество файлове, които се **компилират независимо един от друг**, т.е. осъществява се **разделна компилация**. В резултат на компилацията се получават няколко **обектни файла** (файлове с разширение **.obj**). Изпълнимият код напрограмата (файл с разширение .ехе) се получава след свързване на обектните файлове (**Linking**). + +За да се възполваме максимално от разделната компилация, разделяме класовете на **.h** и **.cpp** файлове. Навсякъде където ще работим с класа, ще включваме **само .h файла.** По този начин, ако променим реализацията на някоя от функциите на класа, ще се **прекомпилира само този файл**. + +![enter image description here](https://i.ibb.co/N9RnMHv/sss.png) + +## Копиращ конструктор и оператор = +Заедно с конструктора по подразбиране и деструктора във всеки клас се дефинират и следните член-функции: + - Копиращ конструктор - конструктор, който приема обект от същия клас и създава новият обект като негово копие. + - Оператор= - функция/оператор, който приема обект от същия клас и променя данните на съществуващ обект от същия клас (обектът от който извикваме функцията. + +**Забележка:** Копиращият конструктор създава нов обект, а оператор= модифицира вече съществуващ такъв! + +```c++ +#include + +struct A +{ + A(int a) + { + std::cout << "Constructor with one int parameter of A" << std::endl; + } + + A(const A& other) + { + std::cout << "Copy constructor of A" << std::endl; + } + + ~A() + { + std::cout << "Destructor of A" << std::endl; + } +}; + +void f(A object) +{ //Copy constructor of A + std::cout << "f()" << std::endl; +} //Destructor of A + +void g(A& object) +{ + std::cout << "g()" << std::endl; +} + +int main() +{ + A obj(3); //Constructor with one int parameter of A + f(obj); + g(obj); + +} //Destructor of A + ``` -- cgit v1.3.1-23-gd82d