Aprendedo C - Parte 2

Até agora só tínhamos visto funções membro com valor de retorno igual a void. Uma função membro, assim como uma função comum, pode retornar qualquer tipo, inclusive os definidos pelo programador.

Por | @oficinadanet Programação

Funções Membro que retornam um valor


Até agora só tínhamos visto funções membro com valor de retorno igual a void. Uma função membro, assim como uma função comum, pode retornar qualquer tipo, inclusive os definidos pelo programador. Sendo assim, sua chamada no programa aplica - se a qualquer lugar onde se espera um tipo igual ou equivalente ao tipo do seu valor de retorno, seja numa lista de argumentos de outra função , numa atribuição ou num operador como o cout << variavel;

Exemplo 3 :
#include 

Resultado do programa:
0
1

Funções Membro Declaradas Externas à Classe


Este exemplo apresenta a implementação, definição, das funções fora da declaração da struct. Além disso introduz uma nova função chamada inicializa e funções float retorna_raio( void ); e void altera_raio( float a ). inicializa coloca o ponto nas coordenadas passadas como seus argumentos. Introduzimos esta função membro aqui para preparar a explicação sobre construtores.

Comentários: Numa declaração de uma classe coloca - se normalmente a declaração das funções membro depois da declaração dos atributos, porém podemos fazer intercalações ou adotar qualquer ordem que nos convenha.

O programador não é obrigado a implementar as funções membro dentro da declaração da classe, basta defini-las e apresentar a implementação em separado segundo a sintaxe ( compilável ) descrita a seguir:

Exemplo 4 :
#include 

Resultado do programa anterior:
10


Exemplo 5:
Programa exemplo círculo, mais complexo:

#include 

Comentários: Observe que a função membro mostra chama a função membro float retorna_raio( void ) que é da mesma classe. Fica implícito da definição de mostra que retorna_raio() se aplica ao mesmo objeto instanciado que recebeu a chamada de mostra, ou seja, não é necessário usar o . na chamada de retorna_raio(). Em programas maiores, chamadas aninhadas de funções membro são bastante comuns.

Programação orientada a objetos e interfaces gráficas com o utilizador: Existem libraries de classes que permitem o programador C desenvolver aplicações para ambientes como o Microsoft Windowsreg. de uma maneira bastante abstrata, este é um exemplo claro de reuso de código, afinal o programador não precisa saber de detalhes da interface para programar nela.

Resultado do programa:
Raio:10
X:0
Y:0
Raio:10
X:1
Y:1
Raio:12.0
X:100.0
Y:1

C: As classes em C englobam os dados membros e as funções membros. Para executar uma ação sobre o objeto ou relativa a este basta chamar uma função membro para este: ac.mostra();

A função membro não precisa de muitos argumentos, porque é própria da classe e portanto ganha acesso aos dados membro do objeto para o qual ela foi associada:
float circulo::retorna_raio(void) 
{ 
    return raio; //tenho acesso direto a raio.
} 

Segurança: Em C o programador pode aceder diretamente os dados do tipo definido pelo usuário: ac.x=100.0.

Veremos maneiras de proibir em C este tipo de acesso directo ao dado membro, deixando este ser modificado somente pelas funções membro. Isto nos garante maior segurança e liberdade pois podemos permitir ou não o acesso para cada dado membro de acordo com nossa vontade.

Eficiência: Alguém pode argumentar que programas que usam bastante chamadas de funções podem se tornar pouco eficientes e que poderia ser melhor aceder diretamente os dados de um tipo definido pelo usuário ao invés de passar por todo o trabalho de cópia de argumentos, inserção da função no pilha, etc.

Na verdade não se perde muito em eficiência, e além disso muitas vezes não se deseja permitir sempre o acesso directo aos dados de um tipo definido pelo programador por razões de segurança. Nesse sentido o C oferece um recurso que permite ganhos em segurança sem perder muito em eficiência.

Mais sobre: c c++
Share Tweet
Comentários
Carregar comentários
Destaquesver tudo