Bonjour, je cherche à savoir à quoi sert le mot clé final dans une déclaration du genre:
Est-ce que cest lequivalent de const en C++?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 static final int LONG_MAX = 256;
Merci!
Bonjour, je cherche à savoir à quoi sert le mot clé final dans une déclaration du genre:
Est-ce que cest lequivalent de const en C++?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 static final int LONG_MAX = 256;
Merci!
Le mot-clé final n'est pas reconnu par mon compilateur C (gcc version 4.1.0).
Inconnu au bataillon !
Quel compilateur utilises-tu ?
Inconnu au bataillon sur MacOSX.
D'où peux tu bien sortir ce mot clé ?
Es tu sûr d'être sur le bon langage ???
Ni C ni C++, Java ou autre langages de ce type !
Extrait venant de ce lien: http://dept-info.labri.fr/~baudon/Ma...sEtObjets.htmlUtilisation de final
Le mot clé final devant un élément signifie que celui-ci ne peut être modifié.
Dans le cas d'une variable de classe, il s'agira donc d'une constante dont la valeur doit être spécifiée, éventuellement par un appel de méthode, à la déclaration.
Pour les variables d'instance, il s'agit de champs dont la valeur doit être spécifiée soit à la déclaration, soit dans les premières instructions des constructeurs. Ces champs ne pourront plus être modifés par la suite. Cette contrainte a pour effet secondaire que, si l'on fournit plusieurs constructeurs, il est impossible que l'un d'eux puisse en utiliser un autre, ce qui nuit à la factorisation du code. Si les variables sont privées, il est alors généralement préférable de renoncer à l'utilisation de final. Notons que l'aspect constant d'une variable ne concerne que sa valeur. Si cette valeur est une référence, l'objet référencé pourra être modifié : s'il s'agit d'une instance, il sera toujours possible de modifier l'un de ses champs et s'il s'agit d'un tableau la valeur d'un de ses éléments.
Pour les méthodes, final aura pour effet d'interdire à une classe héritière de redéfinir la méthode.
Si final est utilisé en Java Apparemment const joue le même rôle (puisqu'il n'y a pas de classe en C, je parle uniquement au niveau des variables).Envoyé par Franck.H
Oui tout à faitEnvoyé par gege2061
PS: Je me suis mal exprimé, je voulais dire, pas en C/C++ mais par contre c'est utilisé en Java ou autre
Le "final" de java n'est PAS l'équivalent de const:
- "final" n'est valide que pour des constantes dont la valeur est connue à la compilation, alors que const est valide aussi pour des paramètres ou des résultats de calculs.
- En C et en C++, un pointeur peut être déclaré const, indiquant qu'il pointe vers une variable qui ne peut être modifiée à travers le pointeur (aucun équivalent java)
- "final" sur une méthode java indique que la méthode ne peut pas être redéfinie. En C++, const indique que la fonction membre ne modifie pas l'objet. Cela permet la const-correctness, notion qui n'existe pas en Java ni en .Net (note: L'équivalent C++/CLI et C# de "final" est sealed, l'équivalent VB est NotOverridable).
- "final" sur une classe java indique qu'aucune classe ne peut être dérivée de la classe qualifiée. Aucun équivalent C++ (note: Ici, l'équivalent C++/CLI et C# de "final" est sealed, l'équivalent VB est NotInheritable)
Envoyé par Médinoc
Désolé Médinoc de te contredire:
cette affirmatin est erronée. On peut assigner une valeur en Run-time à une variable final."final" n'est valide que pour des constantes dont la valeur est connue à la compilation, alors que const est valide aussi pour des paramètres ou des résultats de calculs.
Voici le code java qui le prouve:
Le résultat de ma classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 import java.util.Random; /* * Created on 07.09.2006 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class TestFinal { private final Random random = new Random(); private final int finalValue; public TestFinal() { /* La valeur est assigne en Runtime */ finalValue = random.nextInt(); } public int getFinalValue() { return this.finalValue; } public int getValue(int n) { final int value; value = random.nextInt(n); /* Opérations pas permises par le compilateur value = 0; finalValue = value; */ return value; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestFinal test = new TestFinal(); System.out.println("Valeur 'finale' " + test.getFinalValue()); System.out.println("Valeur 1. appel " + test.getValue(100)); System.out.println("Valeur 2. appel " + test.getValue(100)); } }
On remarque que la valuer retournée par la méthode getValue(int) n'est pas la même pour chaque appel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Valeur 'finale' -620880234 Valeur 1. appel 22 Valeur 2. appel 10
Ça a toujours été le cas, ça? (oui, c'est hypocrite comme question, mais j'étais convaincu qu'il en était ainsi).
Sinon, j'ai du confondre avec le const de C# (qu'il ne faut pas confondre avec celui du C++).
Je ponse que la vrai question(puisque final est du Java ), est-ce que on peut avoir son equivalent en C .?
Pour l'exemple du post original, oui. Pour le reste, pas toujours.
Hum d'accord j'imagine que l'exemple du prof sur les normes de programmation était tiré du Java et non du C. Merci et désolé pour la confusion!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager