bonjour,
quel est l'equivalent en java de:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 virtual int mafonction(void*,int*)=0; virtual int mafonction1( const char *, size_t ) = 0;
bonjour,
quel est l'equivalent en java de:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 virtual int mafonction(void*,int*)=0; virtual int mafonction1( const char *, size_t ) = 0;
Que veut direet quel est son utilité en c++
Code : Sélectionner tout - Visualiser dans une fenêtre à part virtual int mafonction
mais comment remplacer (void*,int)=0;
merci
En Java, tu as des int également.
Le pointeur void n'a pas vraiment d'équivalent.
Eventuellement, tu peux remplacer par Object, dont toutes les classes Java héritent.
Enfin, je dis ça a l'aveugle, les type des paramètres dépendant de ce que tu veux passer. Par exemple j'ai mis string là ou t'as mis char* et size_t car ca forme un tout en java.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public abstract maMethode(Object, int); public abstract maMethode2(String)
Pour la première je dirais qu'il faut utiliser la classe Integer car dans la version d'origine en C++ il demande un pointeur vers un entier.
Chose à bien comprendre en Java : On entend beaucoup de monde dire "les pointeurs n'existent pas en Java". Ce qui est fondamentalement faux. C'est même l'inverse.
En Java TOUS les objets sont accédés via des pointeurs (ce qui simplifie grandement les choses) SAUF les types dits "primitifs" (int, long, float, char, ...).
Object, String, Integer sont tous des objets et une variable à laquelle on affecte un objet est un pointeur vers celui-ci.
Au final je dirais qu'il faut déclarer tes méthodes comme cela :
Par contre je me demande ce que veulent dire les "=0" à la fin de la signature de la fonction...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public abstract maMethode(Object unObjet, Integer unEntier); public abstract maMethode2(String uneChaineDeCaracteres);
Sinon passer un objet en paramètre d'une méthode pour qu'il soit modifié dans l'environnement appelant c'est quelque chose de très courant en C et C++, mais cela fait partie des mauvaises pratiques de code que l'on tente d'éviter en Java. La norme veut en général qu'une méthode/fonction ne modifie pas l'environnement appelant (sauf cas particuliers et sauf modification des attributs de l'objet auquel appartient la méthode).
Donc c'est bien beau de vouloir faire une transcription bête et méchante, mais cela peut amener à rendre le code illisible. Je ne peux pas juger de ce que tu fais vu que je ne sais pas dans quel but tu fais ça, mais réfléchis bien à ce dans quoi tu t'embarques
D'après mes quelques restes de C++, le = 0 signifie que la méthode est virtuelle pure ce qui indique que la classe ne pourra pas être instanciée.
Intéressant...
Mais alors si on déclare une méthode virtuelle "non pure" et qu'on crée un objet de cette classe, que se passera-t-il si on appelle cette méthode ? Elle sera considérée comme possédant un corps vide ? (désolé pour la digression )
A vérifier, mais je pense qu'une méthode virtuelle non pure doit avoir un corps.
si ma mémoire est bon, les méthode "virtual" en C++ sont simplement indiquée comme nécessitant du late binding (donc pas tout à fait la meme chose que du abstract). Par défaut les méthodes en C++ ne sont pas surclassables, contrairement à java, car leur résolution se fait à la compilation.
En effet en java les méthodes sont déjà "virtual" donc il n'y a rien a ajouter.
Et le suffixe "= 0" en C++ correspond bien au modificateur "abstract" en Java.
Partager