|

Mecanismul de Transmitere a Datelor prin Parametrii în C++ 12


1. Obiectivele lecției:

  • Să înțeleagă conceptul de parametri formali și actuali.
  • Să exploreze metodele de transmitere a datelor: prin valoare, prin referință și prin adresă.
  • Să implementeze exemple practice pentru fiecare tip de apel.

2. Parametrii formali și parametrii actuali

  1. Parametrii formali:
    • Variabilele declarate în lista de parametri a funcției.
    • Reprezintă datele de intrare așteptate de funcție.
    • Există doar pe durata execuției funcției.

Exemplu:

void afiseazaSuma(int a, int b) { // a și b sunt parametri formali

    cout << „Suma este: ” << a + b << endl;

}

  1. Parametrii actuali:
    • Valorile sau variabilele transmise funcției în momentul apelului.
    • Se asociază cu parametrii formali.

Exemplu:

int main() {

    afiseazaSuma(3, 5); // 3 și 5 sunt parametri actuali

    return 0;

}


3. Metode de transmitere a parametrilor


1. Apel prin valoare

  1. Definiție:
    • Parametrul formal primește o copie a valorii parametrului actual.
    • Modificările asupra parametrului formal nu afectează parametrul actual.
  2. Exemplu:

void modificaValoare(int x) {

    x = 10; // Parametrul actual nu este afectat

}

int main() {

    int numar = 5;

    modificaValoare(numar);

    cout << „Valoarea lui numar: ” << numar << endl; // Afișează 5

    return 0;

}

  1. Avantaje:
    • Simplu de utilizat.
    • Parametrul actual rămâne neschimbat.
  2. Dezavantaje:
    • Ineficient pentru tipuri mari de date (copierea consumă timp și memorie).

2. Apel prin referință

  1. Definiție:
    • Parametrul formal devine un alias pentru parametrul actual.
    • Modificările asupra parametrului formal afectează direct parametrul actual.
  2. Exemplu:

void modificaReferinta(int& x) {

    x = 10; // Parametrul actual este modificat

}

int main() {

    int numar = 5;

    modificaReferinta(numar);

    cout << „Valoarea lui numar: ” << numar << endl; // Afișează 10

    return 0;

}

  1. Avantaje:
    • Eficient (nu se face copiere).
    • Permite modificarea valorii originale.
  2. Dezavantaje:
    • Poate duce la erori dacă modificările sunt nedorite.

3. Apel prin adresă

  1. Definiție:
    • Parametrul formal primește adresa parametrului actual.
    • Accesul și modificarea se fac prin dereferențiere.
  2. Exemplu:

void modificaAdresa(int* x) {

    *x = 10; // Parametrul actual este modificat

}

int main() {

    int numar = 5;

    modificaAdresa(&numar); // Transmite adresa lui numar

    cout << „Valoarea lui numar: ” << numar << endl; // Afișează 10

    return 0;

}

  1. Avantaje:
    • Eficient și flexibil (permite modificări și acces la memoria parametrului actual).
  2. Dezavantaje:
    • Sintaxa mai complicată.
    • Necesită atenție pentru a evita erorile legate de pointeri.

4. Compararea metodelor de transmitere

CaracteristicăApel prin valoareApel prin referințăApel prin adresă
Modificarea parametrului actualNuDaDa
Eficiență pentru tipuri mariScăzutăRidicatăRidicată
SimplitateSimplăModeratăMai complicată

5. Exemple practice


Exemplu 1: Schimbarea valorilor a două variabile

  • Prin referință:

void swap(int& a, int& b) {

    int temp = a;

    a = b;

    b = temp;

}

int main() {

    int x = 5, y = 10;

    swap(x, y);

    cout << „x: ” << x << „, y: ” << y << endl; // x: 10, y: 5

    return 0;

}

  • Prin adresă:

void swap(int* a, int* b) {

    int temp = *a;

    *a = *b;

    *b = temp;

}

int main() {

    int x = 5, y = 10;

    swap(&x, &y);

    cout << „x: ” << x << „, y: ” << y << endl; // x: 10, y: 5

    return 0;

}


Exemplu 2: Calcularea sumei elementelor unui vector

  • Prin referință:

int suma(const int& a, const int& b) {

    return a + b;

}

int main() {

    int x = 5, y = 10;

    cout << „Suma: ” << suma(x, y) << endl; // Suma: 15

    return 0;

}


6. Activități practice pentru elevi

  1. Scrieți un program care folosește apelul prin referință pentru a tripla valoarea unei variabile.
  2. Implementați o funcție care folosește apelul prin adresă pentru a calcula produsul a două numere.
  3. Realizați un program care calculează suma elementelor unui vector, folosind apelul prin valoare și prin referință.

7. Scheme logice

  1. Apel prin valoare:
    • Start -> Transmite copie -> Modifică copia -> Nu afectează originalul -> Stop.
  2. Apel prin referință:
    • Start -> Transmite referință -> Modifică variabila originală -> Stop.
  3. Apel prin adresă:
    • Start -> Transmite adresa -> Dereferențiere și modificare -> Stop.

8. Concluzie

  • Alegerea metodei de transmitere a parametrilor depinde de cerințele programului:
    • Prin valoare: Pentru date care nu trebuie modificate și sunt mici.
    • Prin referință: Pentru date mari care necesită modificări.
    • Prin adresă: Pentru cazuri complexe care implică acces la locația memoriei.
  • Practica este esențială pentru a înțelege și aplica corect fiecare metodă.

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *