Sari la conținut

[Programarea Orientata Pe Obiecte - C++] Supraincarcarea metodelor


Postări Recomandate

  • Moderators
Postat

** 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!!,
 }

 

  • Like 1
Vizitator
Acest topic este acum închis pentru alte răspunsuri.
  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Termeni de Utilizare & Politică Intimitate