| Laborant | Link template |
|---|---|
| Dragoș B | https://github.com/Ionnier/oop-template |
| Tiberiu M | https://github.com/MaximTiberiu/oop-template |
| Marius MC | https://github.com/mcmarius/oop-template |
Proiectul este configurat cu CMake.
Instrucțiuni pentru terminal:
- Pasul de configurare
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
# sau ./scripts/cmake.sh configureSau pe Windows cu GCC:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -G Ninja
# sau ./scripts/cmake.sh configure -g NinjaLa acest pas putem cere să generăm fișiere de proiect pentru diverse medii de lucru.
Nerespectarea duce la nepunctarea proiectului
- programul va fi scris în C++
- programul va avea un meniu interactiv (doar pentru ilustrarea funcționalității)
- programul nu are erori de compilare
- fară variabile globale
- datele membre private(sau protected)
- GitHub Actions trecute
- commit-uri pe Git adecvate si punctuale
- folosirea a funcționalităților limbajului fără sens
- folosirea a funcționlităților limbajului cu scopul de a încălca "legal" o altă regulă
- folosirea excesivă a claselor friend
- folosirea excesviă a elementelor statice
- lipsa separarea implementarii de definitie
- pentru fiecare cerință (sau subcerință) neîndeplinită se scade 1 punct
- definirea a minim 2-3 ieararhii de clase care sa interactioneze in cadrul temei alese (fie prin compunere, agregare sau doar sa apeleze metodele celeilalte intr-un mod logic)
- minim o clasa cu:
- constructori de inițializare *
- constructor supraîncărcat *
- constructori de copiere *
-
operator=de copiere * - destructor *
-
operator<<pentru afișare (std::ostream) * -
operator>>pentru citire (std::istream) * - alt operator supraîncărcat ca funcție membră *
- alt operator supraîncărcat ca funcție non-membră * - nu neaparat ca friend
- in derivate
- implementarea funcționalităților alese prin upcast și downcast
- aceasta va fi făcută prin 2-3 metode specifice temei alese
- funcțiile pentru citire / afișare sau destructorul nu sunt incluse deși o să trebuiască să le implementați
- apelarea constructorului din clasa de bază din constructori din derivate
- suprascris cc/op= pentru copieri/atribuiri corecte
- destructor virtual
- implementarea funcționalităților alese prin upcast și downcast
- pentru celelalte clase se va definii doar ce e nevoie
- minim o ierarhie mai dezvoltata (cu 2-3 clase dintr-o clasa de baza)
- ierarhie de clasa se considera si daca exista doar o clasa de bază însă care nu moștenește dintr-o clasă din altă ierarhie
- minim o clasa cu:
- cât mai multe
const* - funcții și atribute
static(în clase) *- 1+ atribute statice non-triviale
- 1+ funcții statice non-triviale
- excepții *
- porniți de la
std::exception - ilustrați propagarea excepțiilor
- ilustrati upcasting-ul în blocurile catch
- minim folosit într-un loc în care tratarea erorilor în modurile clasice este mai dificilă
- porniți de la
- folosirea unei clase abstracte *
- clase template
- crearea unei clase template *
- 2 instanțieri ale acestei clase
- STL *
- utilizarea a două structuri (containere) diferite (vector, list sau orice alt container care e mai mult sau mai putin un array)
- utilizarea a unui algoritm cu funcție lambda (de exemplu, sort, transform)
- Design Patterns *
- utilizarea a două șabloane de proiectare
-
Pot exista depunctări până la 2p pentru diferite aspecte precum:
- memory leak-uri
- nefolosirea destructorului virtual la nevoie
- abuzarea de diferite concepte (toate funcțiile declarate virtual)
- apelarea de funcții virtual în constructori
-
În general, acestea sunt prezente în CppCoreGuideline, dar nu e nevoie să parcurgeți documentul, doar să scrieți codul suficient de organizat
-
folderele
build/șiinstall_dir/sunt adăugate în fișierul.gitignoredeoarece conțin fișiere generate și nu ne ajută să le versionăm.