Autor Tópico: constantes  (Lida 2857 vezes)

Offline marKito

  • Usuário Ubuntu
  • *
  • Mensagens: 13
    • Ver perfil
constantes
« Online: 08 de Novembro de 2006, 00:38 »
boas
tenho dúvidas no que relaciona ás constantes em c
nao consigo perceber o contexto de uma variável do tipo "const","static" e um "define".
alguem m pode explicar sucintamente qual a diferença entre estes?
obrigado

Offline daskrs

  • Usuário Ubuntu
  • *
  • Mensagens: 84
    • Ver perfil
Re: constantes
« Resposta #1 Online: 20 de Novembro de 2006, 04:56 »
Bom, o #define é uma diretiva de processamento, ele nunca vai ser compilado, ele só vai ser executado.
É como o comando #include <lib> , que é apenas um link para a biblioteca. A diferença é que o #define é um "link" para um valor qualquer.

O const é uma constante, um valor que nunca vai ser mudado.
A diferença básica entre os dois é que com o #define você economiza memória e gasta mais processamento, com o const você gasta mais memória e economiza processamento.

O static é um valor estático, ele é normalmente usado com Objetos.
Sempre que tu criar uma classe e criar algum objeto static, o valor do objeto não ir mudar independente de quantos objetos da classe tu crie.

Olha esse exemplo do site GUj, o link já  cai direto no tutorial sobre static do site.
Código: [Selecionar]
1 // TesteStatic.java
02 class Classe1
03 {
04     // Variavel static
05     public static int contador = 0;
06
07     // Variavel nao-static
08     public int outroContador = 0;
09
10     public Classe1() {}
11
12     // Precisa ser static porque "contador" é static
13     public static void incrementaContador()
14     {
15         contador++;
16
17         System.out.println("contador agora é "+ contador);
18     }
19
20     public void incrementaOutroContador()
21     {
22         outroContador++;
23
24         System.out.println("outroContador agora é "+ outroContador);
25     }
26 }
27
28 public class TesteStatic
29 {
30     public static void main(String args[])
31     {
32         Classe1 c1 = new Classe1();                     
33         c1.incrementaContador();
34         c1.incrementaOutroContador();
35
36         Classe1 c2 = new Classe1();
37         c2.incrementaContador();
38         c2.incrementaOutroContador();
39         
40         Classe1 c3 = new Classe1();
41         c3.incrementaContador();
42         c3.incrementaOutroContador();
43
44         Classe1 c4 = new Classe1();
45         c4.incrementaContador();
46         c4.incrementaOutroContador();
47     }
48 }
a saida gerada do código fica assim.
Código: [Selecionar]
contador agora é 1
outroContador agora é 1
contador agora é 2
outroContador agora é 1
contador agora é 3
outroContador agora é 1
contador agora é 4
outroContador agora é 1

Espero ter ajudado ;D
Se ainda tiver alguma duvida é só falar.
PS: desculpa não ter respondido antes, é que eu só vi agora esse tópico.
« Última modificação: 20 de Novembro de 2006, 05:07 por daskrs »