Jump to content

[Programarea Orientată Pe Obiecte - C++] Supraîncărcarea metodelor


Soulrayne
 Share

Recommended Posts

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 
	StringBZONE::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 B-ZONE!!,
 }
{
ID Utilizator : 0 ,
Nume Utilizator : Alin ,
Adresa Mail : alin@gmail.com ,
Parola Utilizator : alipassword ,
Numar Posturi : 12,
STATUS BANAT : NU ESTE INTERZIS PE B-ZONE!!,
 }
{
ID Utilizator : 0 ,
Nume Utilizator : MARIUS ,
Adresa Mail : alin@gmail.com ,
Parola Utilizator : alipassword ,
Numar Posturi : 12,
STATUS BANAT : NU ESTE INTERZIS PE B-ZONE!!,
 }
{
ID Utilizator : 0 ,
Nume Utilizator : VASILE ,
Adresa Mail : alin@gmail.com ,
Parola Utilizator : alipassword ,
Numar Posturi : 25,
STATUS BANAT : NU ESTE INTERZIS PE B-ZONE!!,
 }
{
ID Utilizator : 0 ,
Nume Utilizator : IONEL ,
Adresa Mail : alin@gmail.com ,
Parola Utilizator : alipassword ,
Numar Posturi : 30,
STATUS BANAT : ESTE INTERZIS  PE B-ZONE!!,
 }

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.