Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alexsanderborges

Função com referecia

Recommended Posts

Galera famos supor que eu tenho uma class exemplo e tenho uma função assim :

 

 

Exemplo &Funçãoexemplo(int y ,int h);

 

 

 

 

O que significa esse operador de referencia nessa função &Funçãoexemplo , ele esta retornando o primeiro endereço da função ou o endereço do retorno dela, e para que usar um função deste jeito?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas quer dizer que a função vai retornar uma referência para uma variável e não uma nova variável daquele tipo. Referências são oferecidas pelo C++ como uma alternativa para os ponteiros em certos casos, tornando a sintaxe mais simples.

 

Há quem prefira escrever assim:

Exemplo& funcao(...)
Com o '&' junto do tipo de retorno, exatamente para evitar confusão com a sintaxe usada em ponteiros.

 

Ex.:

class Exemplo {
private:
    int m_valor;
public:
    Exemplo(int valor) : m_valor(valor) {}
    int& getValor()
    {
        return m_valor;
    }
};
Note que não faz sentido algum declarar uma variável privada e retornar uma referência para a ela, mas é apenas um exemplo.

 

A classe acima me permite fazer isso:

Exemplo ob(26); // ob.m_valor = 26
int& b = ob.getValor(); // b é uma referência para m_valor retornada por getValor()
int c  = ob.getValor(); // também válido, mas c nao representa m_valor apenas possui o mesmo valor 26
b += 10; // tanto b como m_valor agora sao 36
c += 10; // c agora é 36 mas m_valor nao foi alterado
Todo o código podeira ser feito utilizando ponteiros também, mas a sintaxe fica bem mais poluída ou confusa em certos casos:

int* getValor()
{
    return &m_valor;
}
int* b = a.getValor();
int c = *a.getValor(); 
(*b) += 10; // m_valor foi alterado
c += 10; // c foi alterado mas m_valor nao
Assim como em ponteiros também não se pode retornar referências para variáveis locais:

int& getValor()
{
    int b = 10 + 16;
    return b; // erro! referencia para variavel local
}
O código que chamar a [inline]getValor()[/inline] definida acima vai receber uma referência para uma variável que já foi destruída, podendo ocasionar sérios erros no programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.