Retornando uma referência de uma função em c ++

É possível retornar uma referência de uma função. Mas tenha cuidado se você tentar fazer isso: Você não quer retornar uma referência a uma variável local dentro de uma função - porque quando a função termina, o espaço de armazenamento para as variáveis ​​locais vai embora. Não é bom!

Video: [C] Aula 48 - Funcao - Parte 6 - Passagem por Referência

Mas você pode retornar uma referência a uma variável global. Ou, se a função é uma função membro, você pode retornar uma referência a uma variável de membro.

Por exemplo, aqui está uma classe que tem uma função que retorna uma referência a uma das suas variáveis:

classe DigInto {private: int secreta público: DigInto () {secret = 150} int &GetSecretVariable () {return Secret} Escrever void () {cout lt; lt; segredo lt; lt; endl-}} -

Observe as lojas construtor 150 na segredo variável, que é privado. o GetSecretVariable () função retorna uma referência para a variável privada chamada segredo. E a Escreva() função escreve o valor da segredo variável. Lotes de segredos aqui! E algumas surpresas também. Você pode usar esta classe assim:

int principal (int argc, char * argv []) {DigInto inst-inst.Write () - int &alavanca = inst.GetSecretVariable () - = 30 erguer-inst.Write () - 0-} retornar

Quando você executar este, você vê o seguinte resultado:



15030

A primeira linha é o valor no direito variável segredo após a aplicação cria a instância. Mas olhe para o código com cuidado: A variável chamada alavanca é uma referência a um número inteiro, e torna-se os resultados de GetSecretVariable (). E o que é que resultado?

É uma referência para a variável privada chamada segredo - o que significa que alavanca em si é agora uma referência a essa variável. Sim, uma variável fora da classe agora se refere diretamente a um membro particular da instância! Depois disso, você definir alavanca a 30. Quando você chama Escreva() novamente, a variável privada vai realmente mudar.

Isso parece ser uma má idéia? Você faz a variável privada. E agora o GetSecretVariable () função praticamente eliminou qualquer sentido da variável realmente demais privada. o a Principal() função foi capaz de agarrar uma referência a ele e picar ao redor e alterá-lo no entanto, ele queria, como se não fosse privado! Problema em terra C ++!

Video: Tutorial C++ - 37 - Passando Parâmetros Por Referência (Em Português)

Isso é um problema com referências: Eles podem deixar o código aberto. Portanto pense duas vezes antes de retornar uma referência a uma variável. Aqui está um dos maiores riscos: Alguém pode estar usando esse código, pode não entender as referências e pode não perceber que a variável chamada alavanca tem um link direto para o privado segredo variável.

Tal programador inexperiente pode, em seguida, escrever código que utiliza e mudanças alavanca - sem perceber que a variável de membro está mudando junto com ele. Mais tarde, em seguida, um erro resultados - um bastante desagradável para isso!

Porque funções retornando referências pode deixar programadores inocentes e menos experientes C ++ com um pouquinho muito poder em suas mãos, tenha cuidado com referências. Não, você não tem que evitá-los altogether- basta ter cuidado. Use-os apenas se você realmente achar que deve. Mas lembre-se também que uma melhor abordagem nas aulas é ter funções de acesso membro que podem guardam as variáveis ​​privadas.

No entanto, referências pode ser muito poderosa, desde que você entender o que eles fazem. Quando você usa uma referência, você pode facilmente modificar outra variável sem ter que ir através de ponteiros - o que pode tornar a vida muito mais fácil às vezes. Então, por favor: Use seus poderes recém-descobertos com cuidado.


Publicações relacionadas