Simularea unei aplicatii de tip youtube, care contine clasele App, user, channel, musicchannel si are diverse functionalitati, precum creerea unui playlist sau a da subscribe/ unsubscribe.
- 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
- adăugați trimiteri către resursele externe care v-au ajutat sau pe care le-ați folosit