Jump to content

[Programarea Orientată Pe Obiecte - C++] Inițializare Listă Constructor Membri


Soulrayne
 Share

Recommended Posts

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 StringBZONE()} // Lista Constructor Membrii de Initializat 
{ // Constructor Fara Parametrii 

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

	/// FUNCTIILE STATICE SE INVOCA FOLOSIND "::" !!! 
	
	StringBZONE::allocAndFetchString(&this->username, stringHandling->getString());
	StringBZONE::allocAndFetchString(&this->email, stringHandling->getString());
	StringBZONE::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 StringBZONE(username)}  // IDEM 
{

	StringBZONE::allocAndFetchString(&this->username, stringHandling->getString());  // Setam Numele de Utilizator 
	stringHandling->setString(email); // Schimbam sirul cu urmatoarea informatie 
	StringBZONE::allocAndFetchString(&this->email , stringHandling->getString()); // Setam Adresa De Mail 
	stringHandling->setString(password);
	StringBZONE::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 StringBZONE()} // Lista Constructor Membrii de Initializat 
{ // Constructor Fara Parametrii 

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


	/// FUNCTIILE STATICE SE INVOCA FOLOSIND "::" !!! 
	
	StringBZONE::allocAndFetchString(&this->username, stringHandling->getString());
	StringBZONE::allocAndFetchString(&this->email, stringHandling->getString());
	StringBZONE::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 StringBZONE(username)}  // IDEM 
	
{
	StringBZONE::allocAndFetchString(&this->username, stringHandling->getString());  // Setam Numele de Utilizator 
	stringHandling->setString(email); // Schimbam sirul cu urmatoarea informatie 
	StringBZONE::allocAndFetchString(&this->email , stringHandling->getString()); // Setam Adresa De Mail 
	stringHandling->setString(password);
	StringBZONE::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", "vasile@gmail.com", "vasileparola"), user3, user4, user5; // Declaram doua instante (una cu constructoru implicit + constructor cu parametrii )
	// Vizualizam Instantele 



	user1.setUsername("IONEL");

	user5.setEmail("psadad@gmail.com");

	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 BZONE!!! ,
Parola Utilizator : BINE AI VENIT PE COMUNITATEA BZONE!!! ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE BZONE!!,
 }
{
ID Utilizator : 1 ,
Nume Utilizator : Vasile ,
Adresa Mail : vasile@gmail.com ,
Parola Utilizator : vasileparola ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE BZONE!!,
 }
{
ID Utilizator : 2 ,
Nume Utilizator : BINE AI VENIT PE COMUNITATEA BZONE!!! ,
Adresa Mail : BINE AI VENIT PE COMUNITATEA BZONE!!! ,
Parola Utilizator : BINE AI VENIT PE COMUNITATEA BZONE!!! ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE BZONE!!,
 }
{
ID Utilizator : 3 ,
Nume Utilizator : BINE AI VENIT PE COMUNITATEA BZONE!!! ,
Adresa Mail : BINE AI VENIT PE COMUNITATEA BZONE!!! ,
Parola Utilizator : psadxc ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE BZONE!!,
 }
{
ID Utilizator : 4 ,
Nume Utilizator : BINE AI VENIT PE COMUNITATEA BZONE!!! ,
Adresa Mail : psadad@gmail.com ,
Parola Utilizator : BINE AI VENIT PE COMUNITATEA BZONE!!! ,
Numar Posturi : 0,
STATUS BANAT : NU ESTE INTERZIS PE BZONE!!,
 }

 

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

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.