Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / oop-notes / index.du
diff options
context:
space:
mode:
1 files changed, 48 insertions, 0 deletions
-rw-r--r--src/teaching/oop-2025/oop-notes/index.du48
diff --git a/src/teaching/oop-2025/oop-notes/index.du b/src/teaching/oop-2025/oop-notes/index.du
new file mode 100644
index 0000000..c3641fa
--- /dev/null
+++ b/src/teaching/oop-2025/oop-notes/index.du
@@ -0,0 +1,48 @@
+# Бележки по ООП при C++ - ООП, КН, 2025-2026
+
+'define expected-reading 2 min
+'define created 18 March 2026
+'define edited 18 March 2026
+[$pagenav]
+
+Този документ съдържа редица полезна информация и детайли относно обектно-ориентираното програмиране при C++.
+
+## Голяма петица формат
+
+```c++
+'include ./RuleOfFive.cpp
+
+## [`&&A`], rvalue и rvalue reference
+
+[`lvalue`] е всяка стойност, която има "име".
+Това са аргументи на функции, променливи, ...
+
+[`rvalue`] е всяка стойност за която нямаме "име".
+Най-често срещаните са върнатите стойноти от функция/оператор.
+Тези стойности са временни и идеята е че ще бъдат изтрити (и на практика, данните им ще бъдат копирани/пренесени в нещо с име, [`lvalue`]).
+
+Можем да правим референции върху [`rvalue`]:
+```c++
+A&& rvalueRef = functionWhichReturnsA();
+
+Обаче, тези референции дават (временно) име към [`rvalue`]-то.
+Това означава, че те самите стават [`lvalue`].
+
+Поради тази прична не можем да имаме повече от една [`rvalue`] референция към едно [`rvalue`]:
+```c++
+A&& ref1 = functionWhichReturnsA();
+A&& ref2 = ref1; // Грешка!
+
+И не можем да подаваме аргумент [`rvalue`] на друга функция:
+```c++
+void foo(A&& ref1) {
+ ...
+}
+void bar(A&& ref2) {
+ foo(ref2); // Грешка!
+}
+
+\n\n
+[*Съпътстващи ресурси:*]
+.bulleted
+- [url https://web.archive.org/web/20200627194253/https://thbecker.net/articles/rvalue_references/section_05.html https://thbecker.net/articles/rvalue_references/section_05.html]