Sari la conținut

Postări Recomandate

  • Moderators
Postat

** Importanta Constructori ** 

Constructorii sunt metode care NU returneaza un tip de date , pot detine parametrii sau nu,  si sunt utilizati pentru initializarea si alocarea dinamica a campurilor unei clase . Asemenea , ei poarta numele clasei si se declanseaza la instantierea clasei !!!

 ** Constructor fara Parametrii ** 

Constructorul fara Parametrii sau Implicit (Default) este un constructor fara argumente , el se declanseaza daca nu oferim parametrii la instantiere . 

Construim o functie in afara clasei care ne permite alocarea si atribuirea pentru fiecare sir de caractere 

void atribuireSirCaractere(char** target, const char* source)  // Luam ca argument sirul de caracter pe care dorim sa l initializam dar si valoarea pe care dorim sa o atribuim

// Nota ** : char** pentru ca dorim sa efectuam o modificare a argumentului 

{
	size_t bufferString = strlen(source) + 1;  // Aflam numarul de caractere pe care l are sursa + 1 bit (pentru caracterul terminal)

	*target = new char [bufferString];  // Alocam Targetul in functie de "bufferstring"
	strcpy_s(*target, bufferString, source);  /// Atribuim targetul cu sursa 
}

Construim clasa "Utilizator" cu campurile "id , username , emal , password " :

 

class Utilizator {

private: // Sector Privat (Membrii aflati la acest nivel de acces NU pot fi accesati)


	unsigned id; // Numar Natural 
	char* username; // String
	char* email;  // String 
	char* password; // String 

};

Definim un costructor fara parametrii cu rolul de a atribui acele campuri private

class Utilizator {


public: // Sector Public (Membrii aflati la acest nivel de acces POT FI ACCESATI) 


	Utilizator() { /// Definitie Constructor fara parametrii (argumente)


		// Initializam campurile 

		id = 0; // O initializam cu o valoare default 
	

		// Atribuire Stringuri de Caractere (Accesam functia de mai sus)
        
        /* Astfel ca : 
        
           username , email , password --> sunt targeturi (transferate prin adresa, continutul acestor pointeri se poate schimba la apelul functiei) 
           Celalalte valori (al doilea parametru al functiei) sunt siruri de caractere constante (transferate prin valoare deoarece ne intereseaza sa atribuim targetul cu aceste valori) !! 
        
        */
        
		atribuireSirCaractere(&username, "Vasile"); // Atribuire Nume 
		atribuireSirCaractere(&email, "vasile79@gmail.com"); // Atribuire Email 
		atribuireSirCaractere(&password, "vasileParola"); // Atribuire Parola 
	}
};

Definim getteri pentru accesa campurile in functia main

	// Definim Getteri 
    // Functii Constante deoarece ne intereseaza doar sa citim valorile !!! 

	const unsigned _getIdUser()
	{
		return id;
	}

	const char* const _getUsername()
	{
		return username;
	}

	const char* const _getEmail()
	{
		return email;
	}

	const char* const _getPassword()
	{
		return password;
	}

Construim doua entitati de utilizator ("vasileEntitate1" , respectiv "vasileEntitate2") si afisam continutul acestora :

int main()
{

	Utilizator vasileEntitate1; // Instantiez + Declansam constructorul fara parametrii 

	// Afisam Campurile :  ID | USERNAME |  EMAIL |  PASSWORD 

	cout << vasileEntitate1._getIdUser() << " | " << vasileEntitate1._getUsername() << " | " 
		<< vasileEntitate1._getEmail() << " | "
		<< vasileEntitate1._getPassword() << endl;

	Utilizator vasileEntitate2;  // Instantiem alt obiect dar Declansam acelasi constructor 

	cout << endl;

	/// VOM AVEA ACELASI REZULTAT

	cout << vasileEntitate2._getIdUser() << " | " << vasileEntitate2._getUsername() << " | "
		<< vasileEntitate2._getEmail() << " | "
		<< vasileEntitate2._getPassword() << endl;

	return  0;
}

NOTA ** : VOM OBSERVA CA AMBELE ENTITATI LA APELUL CONSTRUCTORULUI IMPLICIT , NE FURNIZEAZA ACELEASI DETALII !! 

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