Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / week11 / index.du
diff options
context:
space:
mode:
1 files changed, 41 insertions, 41 deletions
-rw-r--r--src/teaching/oop-2025/week11/index.du82
diff --git a/src/teaching/oop-2025/week11/index.du b/src/teaching/oop-2025/week11/index.du
index 7acd8cd..ac154b6 100644
--- a/src/teaching/oop-2025/week11/index.du
+++ b/src/teaching/oop-2025/week11/index.du
@@ -1,63 +1,63 @@
-# Задачи - ООП, Седмица 11, 29.04.2026
+'def title Задачи - ООП, Седмица 11, 29.04.2026
+'def desc Условията на задачите за упражнение.
-'define expected-reading 4 min
-'define created 28 April 2026
-'define edited 29 April 2026
-[$pagenav]
+# {title}
+
+{pagenav 4 min;28 April 2026;29 April 2026}
## За решаване
### Задача 1
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise01 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise01}
-Реализирайте шаблонен клас [`Pair`], който пази две стойности от типове [`T`] и [`U`].
+Реализирайте шаблонен клас {` Pair}, който пази две стойности от типове {` T} и {` U}.
Реализирайте съотвените мутатори и селектори за константни и неконстантни обекти.
### Задача 2
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise02 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise02}
-Реализирайте шаблонен клас [`Option`], който съхранява стойност от тип [`T`].
+Реализирайте шаблонен клас {` Option}, който съхранява стойност от тип {` T}.
-Нека конструкторите да [=не=] са публични.
-За създаване на обект, имплементирайте статични методи [`Some`] и [`None`], първия от които приема стойност, а втория не приема нищо.
+Нека конструкторите да {b не} са публични.
+За създаване на обект, имплементирайте статични методи {` Some} и {` None}, първия от които приема стойност, а втория не приема нищо.
-Целта е следната: ако един [`Option`] е създаден чрез [`None`], тогава обозначаваме че няма стойност, а чрез [`Some`] показваме че има стойност.
-Идеята е аналогична на това когато един указател е [`nullptr`] или не, но работи в по-общи случаи.
+Целта е следната: ако един {` Option} е създаден чрез {` None}, тогава обозначаваме че няма стойност, а чрез {` Some} показваме че има стойност.
+Идеята е аналогична на това когато един указател е {` nullptr} или не, но работи в по-общи случаи.
Имплементирайте методи:
.bulleted
-- [`IsSome`], връща дали има стойност
-- [`IsNone`], връща дали няма стойност
-- [`Unwrap`], връща запазената стойност
+- {` IsSome}, връща дали има стойност
+- {` IsNone}, връща дали няма стойност
+- {` Unwrap}, връща запазената стойност
### Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise03 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise03}
-Реализирайте шаблонен клас [`SharedPointer`], който пази динамично-заделен указател към тип [`T`].
-Допълнително, класа следи за бройката свои [*инстанции*].
+Реализирайте шаблонен клас {` SharedPointer}, който пази динамично-заделен указател към тип {` T}.
+Допълнително, класа следи за бройката свои {i инстанции}.
С други думи, при всяко копиране на създадения обект, увеличаваме бройката, и при всяко унищожаване (извикване на деструктор) намаляваме бройката.
Изтриването на паметта (указателя) се случва тогава, и само тогава когато бройката стигне нула.
.note
-Това е вид [url https://en.wikipedia.org/wiki/Smart_pointer "smart pointer"]: динамично-заделен указател който сам освобождава паметта си, без ние да пишем експлицитен [`delete`]!\n
-В C++ има и други видове smart pointer-и, като "unique pointer" (който е описан в [url #-6 Задача 6]).
+Това е вид {url "smart pointer";https://en.wikipedia.org/wiki/Smart_pointer}: динамично-заделен указател който сам освобождава паметта си, без ние да пишем експлицитен {` delete}!\n
+В C++ има и други видове smart pointer-и, като "unique pointer" (който е описан в {url Задача 6;#-6}).
-Добър въведителен ресурс по темата е [url https://courses.cs.washington.edu/courses/cse333/24au/lectures/16-c++-smartptr.pdf този].
+Добър въведителен ресурс по темата е {url този;https://courses.cs.washington.edu/courses/cse333/24au/lectures/16-c++-smartptr.pdf}.
-Реализирайте [`operator*`] и [`operator->`], които съответстват на операциите върху запазения указател.
-Тоест, [`*x`] трябва да има един и същ ефект върху [`int*`] и върху [`SharedPointer`] от [`int*`].
+Реализирайте {` operator*} и {` operator->}, които съответстват на операциите върху запазения указател.
+Тоест, {` *x} трябва да има един и същ ефект върху {` int*} и върху {` SharedPointer} от {` int*}.
.question
-Как работи [`operator->`]?
+Как работи {` operator->}?
-Имплементирайте също метод [`RefCount`], който връща броя копия.
+Имплементирайте също метод {` RefCount}, който връща броя копия.
Примерна употреба:
-```c++
+```cpp
void inc(SharedPointer<int> val) { // val е копие на y, бройката е 3
*val++;
} // val се унищожава, бройката става 2
@@ -72,36 +72,36 @@ int main() {
### Задача 4
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise04 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise04}
-Реализирайте шаблонен клас [`Vector`], който съхранява неограничено и оразмеряемо количество от обекти [`T`].
+Реализирайте шаблонен клас {` Vector}, който съхранява неограничено и оразмеряемо количество от обекти {` T}.
Освен голяма петица, реализирайте член-функции:
.bulleted
-- [`Count`], която връща броя елементи
-- [`PushBack`], която добавя елемент в края на последователността.
+- {` Count}, която връща броя елементи
+- {` PushBack}, която добавя елемент в края на последователността.
Ако е нужно, уголемява заделеното количество памет.
-- [`operator[]`], който връща референция към обекта на подаден индекс.
+- {` operator[]}, който връща референция към обекта на подаден индекс.
Да бъде наличен при константни и не-константни обекти.
-- [`operator+`] който създава нов [`Vector`] с елементите от първия и след това елементите от втория [`Vector`]
-- [`operator+=`], които добавя елементите на десния [`Vector`] в края на левия
+- {` operator+} който създава нов {` Vector} с елементите от първия и след това елементите от втория {` Vector}
+- {` operator+=}, които добавя елементите на десния {` Vector} в края на левия
## За самоподготовка
### Задача 5
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise05 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise05}
-Реализирайте клас [`DoubleVector`], който съхранява две неограничени и оразмеряеми количества от обекти, съответно от типове [`T`] и [`U`].
+Реализирайте клас {` DoubleVector}, който съхранява две неограничени и оразмеряеми количества от обекти, съответно от типове {` T} и {` U}.
-Имплементирайте голяма петица и член-функциите от [url #-4 Задача 4], обаче всяка трябва да е налична и за двете последователности от обекти.
+Имплементирайте голяма петица и член-функциите от {url Задача 4;#-4}, обаче всяка трябва да е налична и за двете последователности от обекти.
### Задача 6
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise06 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week11/Exercise06}
-Реализирайте шаблонен клас [`UniquePointer`], който пази указател към тип [`T`].
+Реализирайте шаблонен клас {` UniquePointer}, който пази указател към тип {` T}.
Класа трябва да осигури, че само един обект има този указател.
-С други думи, [=не може да има копия=]!
+С други думи, {b не може да има копия}!
-Реализирайте [`operator*`] и [`operator->`], които съответстват на операциите върху запазения указател (т.е. [`*x`] трябва да има същия ефект, без значение дали работим с [`int*`] или [`SharedPointer`], който съхранява [`int*`]).
+Реализирайте {` operator*} и {` operator->}, които съответстват на операциите върху запазения указател (т.е. {` *x} трябва да има същия ефект, без значение дали работим с {` int*} или {` SharedPointer}, който съхранява {` int*}).