Passagem Por Parametroo
Casos: Passagem Por Parametroo. Pesquise 862.000+ trabalhos acadêmicosPor: fervp • 4/6/2014 • 941 Palavras (4 Páginas) • 188 Visualizações
PASSAGEM DE PARÂMETROS
É interessante ressaltar que a criação de novas classes de objetos é uma atividade primária da
programação orientada a objetos, e a complexidade do programa é geralmente escondida nestes objetos. Sendo
assim, escrever a função main() consiste em gerenciar objetos. Um tópico mais complexo sobre criar um tipo
definido pelo usuário (ou classe de objetos) é a passagem de objetos para, e retorno de objetos de funções.
Nesta seção é descrita a passagem de parâmetros, sendo que é dada especial atenção à construção de classes
complexas que podem ser passadas e retornadas corretamente.
Uma função comunica-se com o "mundo externo" de duas maneiras: mudando os valores que são
globais à função ou através de passagem e retorno de valores. A informação pode ser movida da/para função de
duas maneiras:
· Uma cópia da variável inteira é feita;
· Somente o endereço da variável é transferido pelos limites.
O primeiro método é chamado passagem por valor. Já que é feita uma cópia do argumento (ou
variável), esta pode ser usada e alterada dentro da função sem afetar a variável da qual ela foi gerada.
Entretanto, quando uma função precisa ser capaz de alterar os valores das variáveis usadas como argumentos,
os parâmetros precisam ser explicitamente declarados como tipos ponteiros. Assim, utiliza-se o segundo método
que é chamado de passagem por nome, quando um ponteiro é passado, ou de passagem por referência,
quando referências são usadas. Em ambos os casos um endereço é manipulado.
Os endereços são passados por duas razões. A primeira é simplesmente pela eficiência; sabendo-se que
a variável será somente lida, então, geralmente é mais rápido passar o endereço quando se usam objetos
maiores do que um ponteiro. Existe também um benefício adicional em se passar um endereço. No caso de
objetos, passa-se o endereço para um objeto inicializado e o tamanho do endereço é sempre o mesmo, assim
não há problema envolvendo cópia e inicialização.
A segunda razão para passar um endereço é manipular fisicamente o objeto ou variável para o qual o
endereço aponta, isto é, pode-se alterar uma variável ou objeto que é externo a uma função. Normalmente, os
resultados de uma chamada de função devem ser expressos pelo valor de retorno da função, mas existem
situações em que isso não é satisfatório. Por exemplo, a função pode precisar alterar mais de um objeto. Se os
endereços do objeto são passados, a função pode afetar diretamente qualquer número de objetos na função
chamadora.
Na passagem por nome, são explicitamente declarados ponteiros e passados endereços. Já passar por
referência é o mesmo que declarar um argumento para ser um ponteiro e, então, passar um endereço. Com
referências, entretanto, o compilador faz todo o trabalho para o usuário: ele força o endereço a ser passado
dentro de uma função, ainda que o usuário não pegue o endereço explicitamente. Dentro da função, pode-se
manipular os itens como se fossem objetos. Isso é um grande avanço, uma vez que muitos erros quando se
usam bibliotecas da linguagem C, podem ser atribuídos à confusão sobre como passar um endereço. Como o
compilador da linguagem C++ manipula os detalhes, quando se passa argumentos por referência, muito poucos
erros ocorrem. Também é muito mais eficiente passar um ponteiro do que copiar o objeto inteiro dentro da
função chamada.
Entretanto, existem casos onde é preciso uma cópia de um objeto a ser criado dentro da janela da
função. Pode-se necessitar modificar o objeto sem querer que o original seja tocado. Nesses casos, deve-se
passar o objeto por valor. Se o compilador passa um int ou float, por exemplo, ele sabe o que fazer: uma cópia
Professora Isabel Harb Manssour
Linguagem de Programação C++ 26
do dado é empurrada na pilha antes que a função seja chamada. Quando se passa um tipo definido pelo usuário,
entretanto, o compilador não tem idéia de como manipulá-lo.
No caso de uma classe "simples" (nenhum dos dados-membros são ponteiros) onde não foi definido um
inicializador
...