Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
1 files changed, 58 insertions, 0 deletions
-rw-r--r--Sem. 06/README.md58
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 <iostream>
+
+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
+ ```