Cap Tulo 13
Passagem de parâmetro para uma função
Parâmetros para a função devem ter tipo compatível com o tipo declarado no cabeçalho da função. Os parâmetros devem ser passados por valor ou referência.
por valor: função recebe uma cópia do valor passado na chamada. Neste caso, se a função alterar o valor recebido (parâmetro), não afeta a variável original (argumento).
por referência (&xx): o parâmetro é uma referência para o argumento de chamada. Parâmetro e argumento ocupam o mesmo espaço na memória.
Exemplo:
//13.1Exemplo dobra1 dobra2
#include <iostream> using namespace std;
void dobra1 (int a, int b, int c) //passagem de parâmetros por valor
{
a *= 2; b = 2 * b; c *= 2;
}
void dobra2 (int &a, int &b, int &c) //passagem de parâmetros por referência
{
a *= 2; b = 2 * b; c *= 2;
}
int main (int argc, char *argv[])
{
int x = 1, y = 3, z = 7; cout << "antes de chamar a funcao dobra1:\n"; cout << "x = "<< x << ", y ="<< y << ", z =" <<z << endl; dobra1 (x,y,z); cout << "depois de chamar a funcao dobra1:\n"; cout << "x = "<< x << ", y ="<< y << ", z =" <<z << endl; dobra2 (x, y, z); cout << "depois de chamar a funcao dobra2:\n"; cout << "x = "<< x << ", y ="<< y << ", z =" <<z << endl; system ("pause"); return 0;
}
//13.2 Exemplo área e perímetro (funçao que retorna mais de um valor)
#include <iostream> using namespace std;
void area_e_perimetro (double a, double b, double &s, double &p)
{
s = a * b; p = 2 * (a + b);
}
int main (int argc, char *argv[])
{
double la, lb, Area, Per; cout << "Lado a = "; cin>>la; cout << "Lado b = "; cin>>lb; area_e_perimetro( la, lb, Area, Per); cout << "Area = " << Area << endl; cout << "Perimetro = " << Per << endl; system ("pause"); return 0;
}
#include <iostream> using namespace std; double area (double a, double b)
{
double s = a * b; return s;
}
double perimetro (double a, double b)
{