Tocmai ce te-ai infiltrat în lumea pătratelor (nu chiar, avem și dreptunghiuri). Pentru a evada ești nevoit să învingi toate pătratele inamice. Aceștia sunt niște adversari neobișnuiți, cu mișcări paralelogramice, specializați în mânuirea celor mai periculoase arme, maeștrii ai tainelor artelor marțiale, pregătiți să folosească cu iscusință atât săbii, cât și pistoale. Trebuie să iți dovedești agilitatea, coordonarea, dar mai ales curajul. Totuși nu te îngrijora, chiar dacă ai fost transformat într-un pătrat, ți-au fost oferite și ție două arme foarte importante: propriile mâini.
Aveți voie cu cod generat de modele de limbaj la care nu ați contribuit semnificativ doar în folder-ul generated
.
Codul generat pus "ca să fie"/pe care nu îl înțelegeți se punctează doar pentru puncte bonus, doar în contextul
în care oferă funcționalități ajutătoare și doar dacă are sens.
O cerință nu se consideră îndeplinită dacă este realizată doar ca o serie de apeluri proxy către cod generat.
- minim o funcționalitate majoritar doar cu LLM
- minim 2-3 funcționalități ~50% voi, ~50% LLM-ul
- minim 2-3 funcționalități suficient de complicate pe care un LLM nu le poate implementa
- Nume proiect (poate fi schimbat ulterior)
- Scurtă descriere a temei alese, ce v-ați propus să implementați
- definirea a minim 3-4 clase folosind compunere cu clasele definite de voi
- constructori de inițializare
- pentru o aceeași (singură) clasă: constructor de copiere,
operator=
de copiere, destructor
-
operator<<
pentru toate clasele pentru afișare (std::ostream) - cât mai multe
const
(unde este cazul) - implementarea a minim 3 funcții membru publice pentru funcționalități specifice temei alese, dintre care cel puțin 1-2 funcții mai complexe
- nu doar citiri/afișări sau adăugat/șters elemente într-un/dintr-un vector
- scenariu de utilizare a claselor definite:
- crearea de obiecte și apelarea tuturor funcțiilor membru publice în main
- vor fi adăugate în fișierul
tastatura.txt
DOAR exemple de date de intrare de la tastatură (dacă există); dacă aveți nevoie de date din fișiere, creați alte fișiere separat
- tag de
git
: de exempluv0.1
- serviciu de integrare continuă (CI); exemplu: GitHub Actions
- separarea codului din clase în
.h
(sau.hpp
) și.cpp
- moșteniri:
- minim o clasă de bază și 3 clase derivate
- ierarhia trebuie să fie cu bază proprie, nu derivată dintr-o clasă predefinită
- clasă cu atribut de tip pointer la o clasă de bază cu derivate
- funcții virtuale (pure) apelate prin pointeri de bază din clasa care conține atributul de tip pointer de bază
- minim o funcție virtuală va fi specifică temei (e.g. nu simple citiri/afișări)
- constructori virtuali (clone): sunt necesari, dar nu se consideră funcții specifice temei
- apelarea constructorului din clasa de bază din constructori din derivate
- smart pointers (recomandat, opțional)
-
dynamic_cast
/std::dynamic_pointer_cast
pentru downcast cu sens
- suprascris cc/op= pentru copieri/atribuiri corecte, copy and swap
- excepții
- ierarhie proprie cu baza
std::exception
sau derivată dinstd::exception
; minim 3 clase pentru erori specifice - utilizare cu sens: de exemplu,
throw
în constructor (sau funcție care întoarce un obiect),try
/catch
înmain
- ierarhie proprie cu baza
- funcții și atribute
static
- STL
- cât mai multe
const
- la sfârșit: commit separat cu adăugarea unei noi clase derivate fără a modifica restul codului, pe lângă cele 3 derivate deja adăugate
- noua derivată nu poate fi una existentă care a fost ștearsă și adăugată din nou
- tag de
git
: de exempluv0.2
- 2 șabloane de proiectare (design patterns)
- o clasă șablon cu sens; minim 2 instanțieri
- preferabil și o funcție șablon (template) cu sens; minim 2 instanțieri
- tag de
git
: de exempluv0.3
sauv1.0