Returnarea în subprograme
În C++ funcțiile pot returna valori, adică pot întoarce un rezultat către locul în care ele au fost apelate în program. Acest principiu ne permite să calculăm o valoare în interiorul unei funcții, pe care să o folosim ulterior în alte expresii și instrucțiuni.
În funcție de tipul de returnare ales la declararea subprogramului, funcția trebuie să returneze un rezultat de tipul respectiv de dată.
Doar în cazul tipului void funcția poate să nu returneze nimic.
Tipul de returnare poate fi orice tip valid: int, float, char, bool, long long etc. Returnarea din subprogram se realizează folosind construcția return, urmată de o expresie, sau o valoare.
#include <iostream>
using namespace std;
int Patrat(int x) {
return x * x;
}
int main() {
int a;
cin >> a;
cout << "Patratul lui " << a << " este " << Patrat(a) << endl;
return 0;
}
8
Patratul lui 8 este 64
Particularități la returnare
Există câteva aspecte despre returnarea în subprograme, principii pe care le putem folosi în ajutorul nostru pentru a facilita un cod calitativ și simplificarea logicii din funcție.
Oprirea prematură a execuției
La întâlnirea unei instrucțiuni return, execuția subprogramului se încheie în acel punct și se revine în program la locul de unde s-a realizat apelul.
bool numarPrim (int numar) {
if (numar == 2) return true;
if (numar & 2 == 0 || numar < 2) return false;
for (int div = 3; div * div < numar; div += 2) {
if (numar % div == 0)
return false;
}
return true;
}
În această implementare comună pentru verificarea proprietății de număr prim, putem trata de la început cazurile particulare, precum un rezultat afirmativ pentru numărul 2, sau de la bun început false pentru un număr par, evitând verificarea tuturor divizorilor.
Folosirea în expresii
Deoarece returnează o valoare, funcțiile pot fi integrate în expresii matematice sau logice:
int Dublu(int x) {
return 2 * x;
}
int main() {
int a = 3, b = 4;
int s = Dublu(a) + Dublu(b); // s = 2*3 + 2*4 = 14
cout << s;
return 0;
}
Returnarea unei expresii
Pe lângă returnarea unei variabile, sau a unei valori predefinite, funcțiile pot „returna expresii”. În acest caz, programul mai întâi va evalua expresia și va încerca să determine rezultatul său.
Se citesc n numere naturale. Să se afișeze cele care au oglinditul un număr par.
#include <iostream>
using namespace std;
bool oglinditPar(int numar) {
while (numar > 9) numar /= 10;
return numar % 2 == 0; // se returneaza valoarea de adevar
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> x;
if (oglinditPar(x)) cout << x << ' ';
}
return 0;
}
5
785 6054 58 683 41
6054 683 41
Pe lângă o astfel de expresie, o funcție poate returna inclusiv un alt apel de funcție. Acest principiu stă la baza recursivității.