IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Intrusion d'un javaiste ! :)


Sujet :

C++

Vue hybride

Regis.C Intrusion d'un javaiste ! :) 18/06/2006, 00h09
Invité Salut à toi, Bon je vais... 18/06/2006, 00h32
Luc Hermitte 1- Le C++ dispose évidemment... 18/06/2006, 01h46
Regis.C Merci à ceux qui m'ont déjà... 18/06/2006, 01h57
Matthieu Brucher Une référence, c'est un alias... 18/06/2006, 08h26
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut Intrusion d'un javaiste ! :)
    Bonjour à tous,

    je suis développeur java depuis toujours (je n'ai quasiment développé que dans ce langage). Je serai sans doute amené à développer prochainement en C ++. Je souhaiterai savoir les grandes différences conceptuelle de C++ en rapport à java.

    Bon je sais que C++ n'a pas de machine virtuelle, ok.
    1) Mais utilise-t-on des réferences sur les objets, où il y a-t-il une notion (totalement inconnue pour moi) de "pointeur" ?

    2) En quoi consiste la décomposition des fichier .h et .cpp ? Que contiennent-ils respectivement ?

    3) Faut-il gerer l'allocation de mémoire, ou il y a-t-il une sorte de "ramasse miette" ?

    4) toutes les autres questions que vous pourriez imaginer pour quelqu'un comme moi...

    Merci à tous.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut à toi,

    Bon je vais essayer de répondre au 2° point tout d'abord, rapidement... en règle générale, tu écris dans ton header (fichiers .h ou .hpp) la déclaration de ta classe, ensuite dans le fichier source (fichier .cpp), tu écris le corps des méthodes de ta classe.... Voilà à préciser par d'autres membres !

    Pour le 3° point : en C++, contrairement au Java, tu ne disposes pas d'un ramasse-miettes... Par conséquent, c'est à toi de te préoccuper de bien libérer la mémoire allouée pour tes objets... Ainsi, quand tu instancies un nouvel objet avec new, tu devrais toujours en contrepartie libérer la mémoire qu'il occupe quand tu n'en as plus besoin, au moyen de delete.

    Je laisse des personnes plus compétentes te renseigner sur les autres points

    Cordialement,


    PierreAd

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    1- Le C++ dispose évidemment de pointeurs. Qu'ils soient bruts (ceux dont parlent tous les bouquins) ou intelligents (ceux qui te simplifiront la gestion de la mémoire). Je t'invite à regarder la FAQ C++ developpez et même le tutoriel de miles.
    Le C++ dispose également de "références" qui n'ont rien à voir avec les références du Java. Une référence en Java s'apparente, pour le C++, à une sorte de smart-handle à comptage de référence qui sait se dépatouiller des cycles. La référence C++ n'est qu'un alias, c'est à dire un autre nom que l'on va donner à une donnée existante.

    2- En schématisant. .h -> les déclarations d'identifiants qui seront utilisées en de multiples endroits (variables globales, constantes, fonctions, classes)
    .cpp -> les définitions de ces identifiants (pour les classes il ne s'agit que de définir les fonctions membre des classes)

    3- Pas de ramasse miettes en standard (tu en auras un avec celui de Boehm (qui a ses problèmes il me semble), et tu as aussi celui du C++/CLI (qui a sa VM .NET à lui) (le forum de VC++ sera plus approprié).
    En revanche, le C++ propose une approche unique [1] pour gérer toutes les ressources (mémoire, comme pots de peinture) : le RAII (FAQ!) alors que le Java n'a le ramasse miette que pour la mémoire et le dispose-pattern (-> try-finally) pour tout le reste.
    Le RAII prend toute son importance pour implémenter des comportements corrects même en cas d'exception ou de retour prématuré.

    [1] il y en a d'autres, mais le RAII est globalement celle la plus recommandée par défaut. Au besoin on peut s'en écarter pour coder des trucs plus fins à la main.

    4.a- Il y a plein de comparatifs qui présentent les différentes triviales entre le Java et le C++. En voici d'autres qui me viennent à l'esprit.

    4.b- Les specifications d'exceptions en C++ ne feront pas ce que tu penses qu'elle font.

    4.c- Le mot clé const joue un rôle très important. Il est trop souvent négligé.

    4.d- Le C++ est multi-paradigmique. Ne te mets pas des oeillières. Une fonction libre n'est pas le mal incarné. Bien au contraire.
    La généricité va te changer la vie. Elle introduit d'autres façons de définir les commonalities et les points de variations -- par rapport à ce que la liaison tardive du polymorphisme d'inclusion permet.

    4.e- Les espaces de nom sont tes amis.

    4.f- En C++, on peut généralement dégager deux sémantiques : la sémantique de valeur (copiable + "deux données de même valeur sont égales") et la sémantique d'entité (parfois clonable + "deux données différentes (même si leurs états internes sont égaux) ne vont pas être identique ; l'identité, c'est deux références sur un même objet ; après clonage d'un objet, on obtient un tout nouvel objet qui n'est pas identique : il a sa vie propre").
    Java ne permet pas de définir de nouveaux types qui ont une sémantique de valeur.
    Suivant la sémantique d'un type que tu vas écrire, les recettes de cuisine que tu vas appliquer sont différentes.

    4.g- N'hésite pas à user de la bibliothèque standard du C++. D'autres bibliothèques, comme boost, sont aussi tes amies.

    4.h- Il y a plein d'infos dans les FAQ et même dans les posts de comparaison des deux langages.

    4.i- Accelerated C++ de Koenig et Moe, chez Addisson-Wesley est un excellent bouquin d'apprentissage du C++. Oubli les ressources en français.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Merci à ceux qui m'ont déjà répondu.

    Je me permet d'ajouter des questions qui me viennent, parfois déclenchée par vos réponses...

    - Un "pointeur" (je rappelle que j'en ignore tout) peut-il être remplacé par une réference ?
    En gros, quelle est la différence entre un pointeur, et une réference ?

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Une référence, c'est un alias pour l'objet lui-même, une fois que l'alias est défini, on ne peut plus en changer.
    Un pointeur contient l'adresse de l'objet, il permet de changer l'objet, mais il peut aussi changer et pointer vers un autre objet.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Si tu veux retrouver le concept d'une référence en Java, le plus proche que tu puisse avoir c'est :
    - Soit un pointeur intelligent, comme boost::shared_ptr
    - Soit n'importe quel pointeur si tu as mis en place un garbage collector.

    La principale différence restera qu'en Java, la référence et l'objet se traitent de manière indiscriminée (Faire A=B, c'est en fait toucher la référence, faire add(A, B), c'est toucher l'objet), alors qu'en C++, on peut manier les deux séparément (affecter le pointeur ou affecter l'objet, faire de l'artithmétique sur les pointeurs ou sur les objets), et donc on doit spécifiquement indiquer si ce qui nous intéresse, c'est le pointeur ou l'objet.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Intrusion pirate
    Par doudoustephane dans le forum Sécurité
    Réponses: 37
    Dernier message: 02/08/2006, 14h44
  2. Tests d'intrusion
    Par soumou dans le forum Sécurité
    Réponses: 8
    Dernier message: 03/05/2006, 14h14
  3. Intrusion physique sur ma machine : Windows XP journal ?
    Par agoubi dans le forum Windows XP
    Réponses: 3
    Dernier message: 24/02/2006, 13h13
  4. [info]fourchette de salaire pour les javaistes ?
    Par Regis.C dans le forum Général Java
    Réponses: 6
    Dernier message: 07/12/2005, 23h52
  5. utilisateur intrus
    Par novice_oracle dans le forum Oracle
    Réponses: 2
    Dernier message: 29/10/2005, 02h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo