Moderators NEFERPITOU Postat Decembrie 25, 2024 Moderators Postat Decembrie 25, 2024 ** Obiective ** Prezentarea , limitarile impuse dar si exemplificari (in cod C/C++) pe tema supraincarcarii functiilor/metode (clase) . ** Prezentare Concept ** Supraincarcarea functiilor (in C sau C++ din afara claselor) sau a metodelor reprezinta conceptul prin care putem declara si implementa , doua sau mai multe functii cu acelasi nume . NOTA ** : Metode sunt functii situate in cadrul unei clase (membrii) !! Totusi , exista anumite limitari : ** Conditii de Implinit ** FUNCTIILE SAU METODELE TREBUIE SA DIFERE PRIN NUMARUL SI TIPUL DE DATE AL ARGUMENTELE ASOCIATE ACESTUIA !! NU E DE AJUNS SA SCHIMBAM DOAR TIPUL DE DATE RETURNAT !! De exemplu , putem/nu putem supraincarca : // AMBELE NU SE POT SUPRAINCARCA void showObject(); // AICI ORI UNA ORI ALTA int showObject(); // E OK , SE POT SUPRAINCARCA (DIFERA TIPUL DE DATE DINTRE ELE) void showObject(unsigned A); void<(sau alt tip de date)> showObject(float B); // <> --> E DOAR INFORMATIONAL // NU SE POT SUPRAINCARCA void showObject(unsigned A,unsigned B); void showObject(bool A , unsigned B); // ASA DA void showObject(unsigned A , unsigned B , unsigned C); void showObject(bool A,unsigned B); //// si tot asa .. ** Exemplu de Lucru cu functii/metode ** Adaugim , din proiectul trecut , cinci functii supraincarcate : // user.h --> declarare //// ... class User{ ////.... // Alte Functii // Vizualizare Obiect void objectToString() const; // Afisam Obiectul cum este // Astea doua jos merg supraincarcate deoarece avem argumentul schimbat void objectToString(unsigned nrPosts); // Afisam Obiectul cu Numarul de Posturi schimbat in functie de parametru //int objectToString(unsigned nrPosts); --> ASA NU FUNCTIONEAZA void objectToString(const char* username); // AFISAM CU NUMELE DE UTILIZATOR SCHIMBAT // Astea doua jos merg supraincarcate deoarece avem 1 argument in plus void objectToString(unsigned nrPosts, const char* username,unsigned isBanned); // IDEM SUS + NUMELE DE UTILIZATOR void objectToString(unsigned nrPosts, const char* username); // AFISAM CU STATUS DE BANAT SCHIMBAT SI NUME D EUTILIZATOR }; Le implementam pe fiecare : /// User.cpp ///restu de cod // METODE SUPRAINCARCATE void User::objectToString(unsigned nrPosts) // Metoda 2 (Supraincarcata ) { this->nrPosts = nrPosts; // Setam o valoare preluat din parametru objectToString(); // O apelam pe prima pentru afisare } void User::objectToString(const char* username) { stringHandling->setString(username); // Setam numele intr-un container StringLGCS::allocAndFetchString(&this->username, stringHandling->getString()); // il setam objectToString(); /// afisam obiectul } void User::objectToString(unsigned nrPosts, const char* username, unsigned isBanned) { this->nrPosts = nrPosts; // setam numarul de posturi this->isBanned = isBanned; // setam statusul objectToString(username); // schimbam numele + afisam obiectul } void User::objectToString(unsigned nrPosts, const char* username) { this->nrPosts = nrPosts; // setam numarul de posturi objectToString(username); // schimbam numele + afisam obiectul } Testam codul invocand cele 5 metode supraincarcate : /// entryPoint.cpp #include "User.h" // Includem Clasa de Utilizatori int main() { User user1("Alin", "alin@gmail.com", "alipassword"); // Apelam Constructor Default (Implicit) user1.objectToString(); // AFISAM OBIECTUL CU PARAMETRII DIN CONSTRUCTOR user1.objectToString(12); // AFISAM OBIECTUL + 12 POSTURI user1.objectToString("MARIUS"); // AFISAM OBIECTUL CU NUMELE SCHIMBAT user1.objectToString(25,"VASILE"); // AFISAM OBIECTUL CU NUMELE SCHIMBAT + NUMAR DE POSTURI user1.objectToString(30, "IONEL", true); // AFISAM OBIECTUL CU NUMELE SCHIMBAT + NUMAR DE POSTURI + SCHIMBAT STATUS } REZULTATUL : { ID Utilizator : 0 , Nume Utilizator : Alin , Adresa Mail : alin@gmail.com , Parola Utilizator : alipassword , Numar Posturi : 0, STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!, } { ID Utilizator : 0 , Nume Utilizator : Alin , Adresa Mail : alin@gmail.com , Parola Utilizator : alipassword , Numar Posturi : 12, STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!, } { ID Utilizator : 0 , Nume Utilizator : MARIUS , Adresa Mail : alin@gmail.com , Parola Utilizator : alipassword , Numar Posturi : 12, STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!, } { ID Utilizator : 0 , Nume Utilizator : VASILE , Adresa Mail : alin@gmail.com , Parola Utilizator : alipassword , Numar Posturi : 25, STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!, } { ID Utilizator : 0 , Nume Utilizator : IONEL , Adresa Mail : alin@gmail.com , Parola Utilizator : alipassword , Numar Posturi : 30, STATUS BANAT : ESTE INTERZIS PE LEAGUECS!!, } 1
Postări Recomandate