Curs C++ | Sectiunea 20 – Functii (Parametri Default)

 

Sa presupunem ca avem o functie logger ce va afisa mesajele noastre conform tipului de mesaj.

void logger(std::string message, int type) {

switch(type) {
case 0: std::cout <<"Error: " << message << std::endl; break;
case 1: std::cout <<"Log: " << message << std::endl; break;
case 2: std::cout <<"Info: " << message << std::endl;
}

}

int main() {
logger("Outside boundaries",0);
logger("All good", 1);
logger("All good", 2);

return 0;
}

💡 Vom avea nevoie de doi parametri, unul fiind mesajul si al doilea fiind tipul de informatie. Suntem fortati, in modul in care este construita functia, sa o invocam de fiecare data cu toate informatiile si acest lucru poate fi redundant uneori. Aici apare notiunea de parametru default.

 

Parametri default

Ne-am dorit sa nu mai specificam de fiecare data tipul mesajului, sa fie setat pe optiunea Info. Acest lucru il facem foarte simplu in felul urmator:

#include <iostream>
#include <string>

void logger(std::string message, int type = 2) {

switch(type) {
case 0: std::cout <<"Error: " << message << std::endl; break;
case 1: std::cout <<"Log: " << message << std::endl; break;
case 2: std::cout <<"Info: " << message << std::endl;
}

}

int main() {
logger("Outside boundaries",0);
logger("All good", 1);
logger("Nothing to say");

return 0;
}

❓ V-ati putea intreba acum daca este posibil sa avem mai mult de un parametru default. Raspunsul este da, iar functia si invocarea vor arata astfel:

void logger(std::string message = "Nothing to say", int type = 2) {

switch(type) {
case 0: std::cout <<"Error: " << message << std::endl; break;
case 1: std::cout <<"Log: " << message << std::endl; break;
case 2: std::cout <<"Info: " << message << std::endl;
}

}

int main() {
logger("Outside boundaries",0);
logger("All good", 1);
logger();

return 0;
}

❗ Mecanismul dupa cum puteti vedea este destul de simplu, trebuie totusi sa nu uitam de urmatoarele aspecte:

  • ordinea parametrilor este foarte importanta, astfel ca este indicat sa specificam mai intai parametrii non-default iar apoi pe cei default, in ordinea in care sunt trecuti in protototipul functiei; in caz contrar compilatorul nu va putea sa identifice parametrii
  • daca mai mult de un parametru este declarat cu valoare default si cel putin un parametru efectiv este specificat in invocare, valorile sunt asignate in ordinea in care sunt listate in declararea functiei

Va recomand sa va mai jucati putin cu aceste notiuni pentru a intelege mai clar cum functioneaza 😉 . Ca o mic exercitiu, puteti incerca sa faceti logger-ul nostru mai eficient (va dau un hint, folositi enum).

 

Aici se termina si aceasta sectiune, desi este una foarte scurta, am considerat ca este mai bine sa fie separata de restul lucrurilor discutate si pe care le vom discuta 🙂 . Pentru alte intrebari suplimentare, puteti folosi informatiile de aici.

➡ Sectiunea anterioara:Curs C++ | Sectiunea 19 – Functii (Transmitere de parametri)

➡ Sectiunea urmatoare:Curs C++ | Sectiunea 21 – Functii Inline

You may also like...