Curs C++ | Sectiunea 33 – Mostenire Clasa Stack
Aceasta va fi ultima sectiune ce va face referire la clasa noastra Stack. De aceasta data vom incerca sa implementam o noua clasa ce o va mosteni pe cea creata anterior.
💡 Ne dorim o clasa ce poate calcula suma tuturor elementelor stocate intr-o stiva. Nu dorim sa modificam clasa definita anterior prin urmare, cream un nou stack cu noi functionalitati.
Pentru inceput, vom defini pur si simplu o sub-clasa ce mosteneste o super-clasa. Sintaxa arata in felul urmator:
In acest moment, clasa SumStack nu defineste nicio noua componenta dar asta nu inseamna ca este goala. Deriva toate componentele definita in super-clasa, anume in Stack.
🔌 Alfel spus, orice obiect de tip SumStack are aceleasi functionalitati precum un obiect de tip Stack.
Ne dorim urmatoarele noi functionalitati de la aceasta clasa.
- dorim ca metoda push nu doar sa adauce o noua valoare in stiva, dar sa o adauge in acelasi timp si la suma elementelor curente
- dorim ca metoda pop nu doar sa elimine o valoare din stiva, dar sa o scada si din suma elementelor curente
Declarare
Mai intai adaugam o noua variabila, privata, ce va avea rolul de a stoca suma curenta a elementelor din stiva. Urmeaza apoi sa adaugam doua metode numite push si pop, insa nu aveam deja aceste metode?
💡 Desi aveam aceste metode in super-clasa si le-am mostenit, noi le vom schimba functionalitatea, dar numele il vom pastra. Putem spune ca interfata clasei ramane aceeasi, chiar daca modificam implementarea interioara.
Implementare
Urmeaza acum sa implementam prima metoda, push. Trebuie sa realizeze doua lucruri esentiale:
- sa adauge la suma noua valoare
- sa adauge in stiva noua valoare
Prima instructiune este desul de clara, nu ar trebui sa fie nevoie de nicio explicatie. Sa aruncam insa o privire pe a doua instructiune.
Veti observa ca nu este necesar sa definim inca o data functionaliatea de a adauga un nou element in stiva, intrucat este deja implementata in clasa Stack.
🔁 Tot ce trebuie sa facem este sa o folosim, insa trebuie sa indicam foarte clar ce metoda dorim sa apelam si pentru a nu exista confuzie, folosim si operatorul scope, de aici si prefixul “Stack::“.
Urmatoarea metoda, pop, va fi implementata folosind aceleasi concepte exeplicate anterior.
💡 Avem nevoie totusi de o metoda aditionala specifica noii clase. Desi am declarat variabila noastra sum, aceasta este privata asa ca nu o putem accesa din exterior. Cream o metoda publica pe care o numim getSum ce returneaza suma.
Suntem aproape gata dar am uitat ceva minor, insa esential. Variabila noastra sum nu este initializata si ar trebui sa aiba valoarea 0 in momentul crearii un obiect. Asa cum am procedat si data trecuta, vom folosi constructorul.
❗ Tineti cont insa de faptul ca trebuie sa luam in calcul si initializarea din constuctorul super-clasei Stack. Astfel ca scrierea va arata in felul urmator:
📝 Adaugarea sintaxei “: Stack()” indica faptul ca dorim sa invocam mai intai constructorul super-clasei si apoi constructorul clasei curente, SumStack.
Codul complet va arata in felul urmator:
Utilizare
Nu ar trebui sa fie nicio problema in explicarea acestui cod, intrucat am lucrat ca si in cazul clasei Stack. Va incurajez sa incercati si voi sa implementati noi functionalitati si poate chiar o noua clasa derivata.
Aici se termina si aceasta sectiune. Nu vom continua in urmatoarea tot cu stive dar vom continua totusi cu noi concepte de OOP 🙂 . Pentru intrebari suplimentare puteti folosi informatiile de aici.
➡ Sectiunea anterioara:Curs C++ | Sectiunea 32 – Implementare POO Stack
➡ Sectiunea urmatoare:Curs C++ | Sectiunea 34 – Anatomia unei Clase

