Sari la conținut

Postări Recomandate

Postat

** Obiectiv ** 

In tutorialul acesta , vom prezenta o alternativa , mult mai corecta , pentru initializarea  membriilor  unei clase , in semnatura constructorului .  

NOTA ** : Codul va fi preluat din proiectul de la tutorialele trecute de POO . (Cu mici modificari evidentiate )

 

** Model ** 

constructor(x,y,z,...,c) : m_x{x},m_y{y},m_z{z},......,m_c{c} 
{
   // Continut Constructor 
}

// m_x --> membru al clasei && x = parametru(variabila cu stocare locala)

** Initializarea variabilelor & Pointerilor ** 

// User.cpp 

//** Implementarea Constructorilor **//


User::User() : 
	id{ 0 }, nrPosts{ 0 }, isBanned{ false } , stringHandling{ new StringLGCS()} // Lista Constructor Membrii de Initializat 
{ // Constructor Fara Parametrii 

	// Alocam si Initializam date cu informatii IMPLICITE (DEFAULT )

	/// FUNCTIILE STATICE SE INVOCA FOLOSIND "::" !!! 
	
	StringLGCS::allocAndFetchString(&this->username, stringHandling->getString());
	StringLGCS::allocAndFetchString(&this->email, stringHandling->getString());
	StringLGCS::allocAndFetchString(&this->password, stringHandling->getString());
}

// Idem 
User::User(unsigned id, const char* username, const char* email, const char* password)
	: id{ id }, nrPosts{ 0 }, isBanned{ false },stringHandling{new StringLGCS(username)}  // IDEM 
{

	StringLGCS::allocAndFetchString(&this->username, stringHandling->getString());  // Setam Numele de Utilizator 
	stringHandling->setString(email); // Schimbam sirul cu urmatoarea informatie 
	StringLGCS::allocAndFetchString(&this->email , stringHandling->getString()); // Setam Adresa De Mail 
	stringHandling->setString(password);
	StringLGCS::allocAndFetchString(&this->password, stringHandling->getString()); // Setam Parola 
}

NOTA 1 ** :  ACEASTA ABORDARE SE APLICA DOAR CONSTRUCTORILOR , IN SEMNATURA ACESTORA ;

NOTA 2** :  IN CADRUL ACESTEIA , NU ESTE NECESAR DIFERENTIEREA DINTRE MEMBRII CLASEI (Declaratia din AFARA ACOLADEI) SI CEI LOCALI (Partea din ACOLADA)

NOTA 3** : PUTEM APELA , DE ASEMENEA ,  FUNCTII IN INTERIORUL ACOLODELOR , CONDITIA E SA RETURNEZE TIPUL DE DATE CORESPONDENT MEMBRULUI . 

** Initializare Constante & Valori Statice ** 

O utilitate foarte importanta a acestei forme de initializare , e faptul ca ne permite sa initializam CONSTANTE !!! 

Pe aceasta cale , ii vom atribui id-ului fiecarui utilizator , o valoare constanta si incrementat la fiecare instantiere printr-o variabila statica .  

// user.h 

class User{

const unsigned id;  // COD UNIC DE IDENTIFICARE UTILIZATOR CONSTANT     --> II APLICAM ID-UL UN ATRIBUT CONSTANT (EL NU SE SCHIMBA)
static inline unsigned s_id; // VALOARE STATICA INTERMEDIARA            --> ADAUGAM O VALOARE STATICA PENTRU A RETINE NUMARUL DE INSTANTIERI 

User(const char* username, const char* email, const char* password);    // --> MODIFICAM CONSTRUCTORUL , NU AVEM NEVOIE DE PARAMETRUL ID !! 


// Restul de declaratii 

}; 

Noua Implementare a constructorilor : 

/// user.cpp

//** Implementarea Constructorilor **//
User::User() : 
	id{s_id++}, nrPosts{ 0 }, isBanned{ false },  // lui id ii se atribuie valoarea lui s_id iar apoi s_id se incrementeaza cu o unitate 
	stringHandling{ new StringLGCS()} // Lista Constructor Membrii de Initializat 
{ // Constructor Fara Parametrii 

	// Alocam si Initializam date cu informatii IMPLICITE (DEFAULT )


	/// FUNCTIILE STATICE SE INVOCA FOLOSIND "::" !!! 
	
	StringLGCS::allocAndFetchString(&this->username, stringHandling->getString());
	StringLGCS::allocAndFetchString(&this->email, stringHandling->getString());
	StringLGCS::allocAndFetchString(&this->password, stringHandling->getString());
}

// Idem 
User::User(const char* username, const char* email, const char* password)
	: id{s_id++}, nrPosts{ 0 }, isBanned{ false },  
	stringHandling{new StringLGCS(username)}  // IDEM 
	
{
	StringLGCS::allocAndFetchString(&this->username, stringHandling->getString());  // Setam Numele de Utilizator 
	stringHandling->setString(email); // Schimbam sirul cu urmatoarea informatie 
	StringLGCS::allocAndFetchString(&this->email , stringHandling->getString()); // Setam Adresa De Mail 
	stringHandling->setString(password);
	StringLGCS::allocAndFetchString(&this->password, stringHandling->getString()); // Setam Parola 
}

Revenim la functia principala , instantiem 5 obiecte de tip Utilizator si le afisam : 

#include "User.h" // Includem Clasa de Utilizatori 


int main()
{
	User user1,
		user2("Vasile", "[email protected]", "vasileparola"), user3, user4, user5; // Declaram doua instante (una cu constructoru implicit + constructor cu parametrii )
	// Vizualizam Instantele 



	user1.setUsername("IONEL");

	user5.setEmail("[email protected]");

	user4.setPassword("psadxc");

	user1.objectToString(); // Vizualizam Instanta 1 
	user2.objectToString(); // Vizualizam Instanta 2 
	user3.objectToString(); // Vizualizam Instanta 3
	user4.objectToString(); // Vizualizam Instanta 4
	user5.objectToString(); // Vizualizam Instanta 5 
	return 0;  
}

Afisand Obiecte , vom avea urmatorul rezultat : 

{
ID Utilizator : 0 ,
Nume Utilizator : IONEL ,
Adresa Mail : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Parola Utilizator : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!,
 }
{
ID Utilizator : 1 ,
Nume Utilizator : Vasile ,
Adresa Mail : [email protected] ,
Parola Utilizator : vasileparola ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!,
 }
{
ID Utilizator : 2 ,
Nume Utilizator : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Adresa Mail : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Parola Utilizator : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!,
 }
{
ID Utilizator : 3 ,
Nume Utilizator : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Adresa Mail : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Parola Utilizator : psadxc ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!,
 }
{
ID Utilizator : 4 ,
Nume Utilizator : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Adresa Mail : [email protected] ,
Parola Utilizator : BINE AI VENIT PE COMUNITATEA LEAGUECS!!! ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE LEAGUECS!!,
 }

CONCLUZIE : PENTRU FIECARA INSTANTA , NI SE GENEREAZA UN COD UNIC DIFERIT , IN FUNCTIE DE ORDINEA INITIALIZARII !!! 

  • Administrator
Postat

Tutorialul este impecabil, de data asta chiar nu am nimic de obiectat, frumos, fiecare lucru este integrat, mă surprinzi pe zi ce trece.

  • Like 1
Postat

Multumesc pentru feedback si sutinere . Pe zi ce trece , imi dau silinta sa aduc tutoriale la standarde cat mai bune dar si interpretabile pentru persoanele care sunt la inceput  sau progreseaza . 
Toate bune !

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