Skip to content

Ionnier/oop-template

 
 

Repository files navigation

Nu primesc notă pentru că nu am pus titlu și descriere

Folosiți template-ul corespunzător grupei voastre!

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

Instrucțiuni de compilare

Proiectul este configurat cu CMake.

Instrucțiuni pentru terminal:

  1. Pasul de configurare
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
# sau ./scripts/cmake.sh configure

Sau pe Windows cu GCC:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -G Ninja
# sau ./scripts/cmake.sh configure -g Ninja

La acest pas putem cere să generăm fișiere de proiect pentru diverse medii de lucru.

Cerințe obligatorii

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

Cerințe

  • 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
    • 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
  • 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ă
  • 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

Observații

  • 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/ și install_dir/ sunt adăugate în fișierul .gitignore deoarece conțin fișiere generate și nu ne ajută să le versionăm.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • CMake 65.6%
  • Shell 21.8%
  • C++ 12.2%
  • C 0.4%