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 :

Conseil pour passage Java -> C++


Sujet :

C++

  1. #21
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Ben les manipulations mémoire ne seront pas les mêmes- donc ça ne fais pas la même chose. Ca peut (je pense pas toujours) donner le même résultat, mais pas de la même façon.

    Peut être que c'est pas important pour tout le monde (je pense que la plupart des cas simples, on s'en fou) mais dans toutes les applications que j'ai fait jusqu'ici, même la manière dont on arrive au résultat compte.

    Plus globalement je pense que c'est pas une bonne idée de partir d'un language directement en transposant la logique d'un autre. Ca amène quasi directement à de la frustration qui peut couter non seulement du moral mais aussi de la productivité.

    (au passage, je vois mal le rapport entre les shared_ptr et le JAVA, il me semble que le garbage collector travaille d'une manière plus subtile et temporisée que ce qu'il se passe avec un shared_ptr - mais faudrait un expert java pour le confirmer )

  2. #22
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Klaim
    au passage, je vois mal le rapport entre les shared_ptr et le JAVA, il me semble que le garbage collector travaille d'une manière plus subtile et temporisée que ce qu'il se passe avec un shared_ptr - mais faudrait un expert java pour le confirmer
    Le GC de Java marche comme tout GC... en séparant les objets accessibles de ceux qui ne le sont plus, et sont alors "finalisés"
    Ensuite la destruction de l'objet peut passer par plusieurs phases en fonction des references qui trainent dessus (Weak, ...).

    Sinon les references vers un objet Java sont exactement comme des shared_ptr. Le "finalize" pouvant être associé au destructeur. A la différence, qu'en C++ l'objet sera détruit dès la perte du dernier shared_ptr, alors qu'en Java, la finalisation peut trainer ad vitam aeternam (rien n'oblige une implémentation java de finaliser les objets d'ailleurs).

    Sinon, après, c'est un avis personnel... la programmation Java et la programmation C++ sont très proches... (même si Java est plus proche de C# encore surtout depuis 1.5).
    Dans les deux cas il faut bien séparer les "types" (en C++ constructeurs par recopie, definition des opérateurs == etc..., en Java, implémentation de Serializable et Clonable, redéfinition de equals et hashCode, immutabilité et finalisation des methodes) des "objets" (en C++, constructeur par recopie et operateur de copie privés) et les mêmes principes d'algorithmique s'appliquent.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #23
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Sinon, après, c'est un avis personnel... la programmation Java et la programmation C++ sont très proches... (même si Java est plus proche de C# encore surtout depuis 1.5).
    Dans les deux cas il faut bien séparer les "types" (en C++ constructeurs par recopie, definition des opérateurs == etc..., en Java, implémentation de Serializable et Clonable, redéfinition de equals et hashCode, immutabilité et finalisation des methodes) des "objets" (en C++, constructeur par recopie et operateur de copie privés) et les mêmes principes d'algorithmique s'appliquent.
    La tu compares une moto à... au moteur d'une voiture, pas à la voiture.

    Tu voulais surement comparer la programmation Java et le C++ OO.

    En supposant que tu vises juste, on pourrait rapprocher le code de Boost et du code Java ?

    La programmation générique prend de plus en plus de place en C++ et ça devrait continuer avec la croissance de Boost et C++0x. Le C++ ce n'est plus juste quelques sucres syntaxiques pour écrire des fonctions templates, de l'OO et des exceptions.

    Si tu veux programmer en C++ comme en Java, tu rateras pas mal de choses intéressantes et puissantes.

    Pour ce qui est de la gestion des ressources, en effet les smart pointers sont ce qu'il faut pour "ne plus se soucier de la libération des ressources". Sauf qu'effectivement comme dit ci-dessus l'objet est détruit quand il ne sert plus, et non pas quand une machine virtuelle daignera s'en soucier.

  4. #24
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Citation Envoyé par atha2 Voir le message
    J'avoue être étonné par cette remarque. Dans mon esprit (pervertit par le Java probablement), le C++ était un langage Objet. Si tu pouvais m'éclairait un peu plus sur la bonne démarche à suivre pour réaliser un bon programme en C++.
    tu peux écrire ça:

    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
     
    void affiche( std::string * uneChaine )
    {
         std::cout << *uneChaine << " , taille: " << uneChaine->length() << std::endl;
    }
    //...
    int main()
    {
        std::string * chaine = new string();
        affiche( chaine );
     
        delete chaine;
     
        return 0;
    }
    alors que le code "normal" en C++ serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void affiche( const std::string & maChaine )
    {
        std::cout << maChaine << " , taille: " << maChaine.length() << std::endl;
    }
    //..
    int main()
    {
        std::string chaine;
        affiche( chaine );
     
        return 0;
    }
    Pareil dans les classes:

    tu peux écrire cela:

    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
     
    class MaClasse
    {
        public:
     
            /**
             * Constructeur.
             */
            MaChaine( std::string chaine )
            {
                  chaine_ = new std::string( chaine );
            }
     
            /**
             * Destructeur.
             */
            ~MaChaine()
            {
                delete chaine_;
            }
     
            /**
             * Getter
             */
            std::string * getChaine()
            {
                return chaine_;
            }
     
        private:
     
            std::string * chaine_;
    };
    alors que le code classique en C++ serait:

    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
     
    class MaClasse
    {
        public:
     
            /**
             * Constructeur.
             */
            MaChaine( const std::string & chaine )
            : chaine_( chaine )
            {
            }
     
            /**
             * Getter
             */
            const std::string & getChaine() const
            {
                return chaine_;
            }
     
        private:
     
            std::string chaine_;
    };
    La deuxième classe se copie sans problème. Une méthode naïve avec la première t'amènera à la catastrophe.

  5. #25
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Dans les grosses différences :
    - si tu as compris le LSP, l'héritage multiple ne devrait pas poser de problèmes majeurs -- vu que tu ne serais alors pas tenté de l'utiliser à mauvais escient.

    - une vraie sémantique de valeur est possible sur les types utilisateurs C++, et combinée avec le polymorphisme paramétrique à la sauce template (qui est plus qu'un sucre syntaxique au dessus d'un void*), plus besoin de se prendre le choux sur comment implémenter equals().

    - des données qui ont une allocation stack-based ("statique" me fait plutôt penser à la zone statique de mémoire (i.e. où sont les globales)). C'est le point de départ pour le RAII : permettre de libérer n'importe quelle ressource (mémoire comme pot de peinture) de façon déterministe, implicite, et uniforme. [d'où les remarques sur les shared_ptr<> et autres (indirectement) "les javaistes font des news contrairement à nous"]

    - plus d'introspection "dynamique", mais de la méta-prog template (TMP) qui s'y substitue parfois, quand la TMP n'est pas utilisée pour d'autres choses (à tord comme à raison).

    - pas de type Object racine de tout type défini par le développeur, vive les templates!

    - ...


    Côté ED(I)s, je conseillerai VC++2008, C::B, ou à la limite des vrais éditeurs (vim, emacs).

    Côté bibliothèques : la SL tout simplement pour les conteneurs et les algorithmes. boost (dans un premier temps par défaut) pour quantité d'extensions hétérogènes (threads, réseau, autres conteneurs, i18n, calcul matriciel, tableaux 2d, regex, sérialisation, ...). Qt est à la mode pour les IHMs.

    Citation Envoyé par atha2
    Doit-on définir (écrire le corps de la fonction) les constructeurs ainsi que les destructeurs, redéfinitions d'opérateur ?
    Seulement si la sémantique et les ressources encapsulées le dictent.

    Citation Envoyé par ath2
    Sachant que ces derniers(getteur/setteur) doivent être déclaré inline cela oblige-t'il à les coder dans le header ?
    Si tous tes accesseurs et mutateurs sont des trivaux setters/getters qui peuvent être définis inline, et que tu en as une paire pour chaque donnée, c'est que tu as foiré quelque chose dans ton design.
    Sinon, pour en revenir à la technique, on peut les mettre inline, mais ce n'est pas nécessaire. Et inline implique définition visible dans toute unité de traduction qui s'en sert (une unité de traduction == un .cpp plus tous les .h et .inl directement et indirectement inclus depuis le .cpp). Tu t'y prends comme tu veux, le tout est que la définition inline soit visible.
    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...

  6. #26
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par loufoque Voir le message
    [des new] Moi j'en mets nulle part (à part quelques placement new dans des briques bas-niveau)
    Par curiosité comment tu fais un Pimpl sans new ? Ou tu n'en utilises pas du tout ?
    (désolé ça n'a rien à voir avec le sujet initial)

    MAT.

  7. #27
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Quand je dois allouer de la mémoire, j'utilise des choses bien plus fines que operator new qui est une vraie daube à mon humble avis.
    Si jamais je devais l'utiliser, ce ne serait certainement pas à l'extérieur de l'interface du template implémentant le pimpl idiom.
    Boost ftw

  8. #28
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Quand je dois allouer de la mémoire, j'utilise des choses bien plus fines que operator new qui est une vraie daube à mon humble avis.
    Tu utilises quoi ?

  9. #29
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Laisse moi deviner : des allocateurs custom ou des pools?

  10. #30
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Il y a un certain nombre de problèmes avec l'interface de operator new/delete, et dans une moindre mesure avec l'interface des allocateurs standard.
    - Pas de réel support de l'alignment
    - Pas de réelle distinction entre la taille de l'objet et le nombre d'objets alloués
    - Pas de réelle distinction entre l'allocation d'un nœud et l'allocation de tableaux (plus ou moins la même chose que le point précédent)
    - Pas de réel support de l'agrandissement et la réduction d'un tableau, d'un côté ou de l'autre.

    Je n'ai pas de solution idéale, mais j'ai pas mal réfléchi sur le sujet.

    Il serait dommage en particulier de ne pas faire usage de certaines propriétés statiques requises par C++ mais qui ne sont pas exploitées :
    - Celui qui détruit doit savoir s'il s'agit d'une allocation de nœud ou de tableau (plus ou moins équivalent à utiliser delete[] pour un new[])
    - Celui qui détruit doit savoir l'alignement et la taille de l'objet (équivalent au delete, sauf qu'ici le destructeur virtuel n'aide pas)

    De plus, à part dans les cas avec du partage de propriété, j'oblige à ce que le thread qui libère soit le même que celui qui alloue (se généralise d'ailleurs à tout type de ressource), autant exploiter ça aussi.

    Idéalement j'aimerais aussi supporter directement l'allocation sur la pile et la Small Buffer Optimization directement dans l'allocateur, mais c'est potentiellement problématique sans double stockage.
    Boost ftw

  11. #31
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Petite question de POO, en C++ peut t'on :
    - à partie d'un objet de type A accéder à un attribut déclaré privé d'un autre objet de type A ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Class A
    {
        public :
            void test(&A autreInstance)
            {
                     this->var = 5;//pas de problème
                     autreInstance.var = 5;//possible ou pas ?
             }
        private :
              int var; //variable privé
    };
    Je pose cette question car en Java une telle manœuvre est possible, ce qui paraît logique car l'encapsulation ne sert qu'à empêcher l'utilisateur de d'accéder au mécanisme interne de la classe.
    EDIT : Je vient de tester et apparemment ça compile mais j'avais vu dans un tutoriel que ce n'était pas censé marcher.

  12. #32
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si si, c'est normal, c'est comme ça que ça fonctionne également en C++.

  13. #33
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    C'est tout à fait correct et c'est utilisé la plupart du temps lorsque l'on définit des constructeurs de copie.

    Par contre, il faudra que tu passes la référence (le "&") de l'autre côté de "A"

  14. #34
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    EDIT : Je vient de tester et apparemment ça compile mais j'avais vu dans un tutoriel que ce n'était pas censé marcher.
    Ton tutoriel a faux (comme tu la vu), car en C++ toute classe est amie d'elle même (on dit aussi que le C++ réalise une encapsulation au niveau de la classe et non de l'objet.)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  15. #35
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    Je n'ai pas tout lu, mais ce que je peux dire de mon expérience des vendredis (je passe en revue les check-ins de la semaine) à propos des programmeurs Java qui sont "forcés" de faire du C++ (3 permanents, et souvent les stagiaires):
    - d'une façon général ils n'ont aucun problème
    - ils structurent peut-être un peu trop par des hiérarchies profondes. Par exemple, la décomposition suivante ne leur vient pas naturellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class infrastructure { ...infrastructure... };
    template < class T > class Utile : public infrastructure {
    ...comportement spécialisé...
    };
    - ils utilisent moins les horreurs venues du C, ce qui se ressent très positivement sur la fiabilité
    - je vois arriver des emballages suspects masquant des MFC, libs open source GPL et autres trucs interdits chez nous, parce qu'ils manquent d'un tas de commodités que le C++ ne fournit pas.
    - et ils foutent des new partout, bordel! ça m'énerve

    C'est peut-être spécifique à mon équipe, mais les programmeurs formés en Java sont aussi plus jeunes que la moyenne, c'est sans doute aussi pour ça qu'ils s'adaptent si bien.
    Pour le problème du "new partout" (c'en est vraiment un), j'ai du mal à faire adopter les librairies C++ (STL, et surtout certains trucs pédants de Boost, qui ne passe carrément pas).
    "Maybe C++0x will inspire people to write tutorials emphasizing simple use, rather than just papers showing off cleverness." - Bjarne Stroustrup
    "Modern C++11 is not your daddy’s C++" - Herb Sutter

  16. #36
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Donc si j'ai bien compris, on utilise :
    • std::string *chaine = new string(); -> agrégation
    • std::string chaine; -> composition
    • char *chaine = malloc(10 * sizeof char); -> ne jamais utiliser !!
    J'ai bien compris ??

  17. #37
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    On utilise le code 2 et uniquement le 2!
    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...

  18. #38
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    Effectivement c'est le code 2 uniquement. Le code 1 est typiquement le syndrome du "new partout" auquel je faisais allusion dans mon post précédent. Techniquement, il n'est pas fautif, mais il tend la joue (il faut libérer manuellement chaine à un moment donné, car pas de GC automatique en C++), pour aucune bonne raison: le code 2 est plus naturel lors de l'utilisation de l'objet, car on n'a pas besoin de dépointer.
    En gros, si j'ai un seul conseil à donner: "new ==> drapeau rouge". 9 fois sur 10 un "new" écrit par un programmeur formé en java sera inutile, voire néfaste, en C++. Il est très dommage que ce mot-clé soit repris à l'identique dans les deux langages, car les deux concepts différent très significativement.
    "Maybe C++0x will inspire people to write tutorials emphasizing simple use, rather than just papers showing off cleverness." - Bjarne Stroustrup
    "Modern C++11 is not your daddy’s C++" - Herb Sutter

  19. #39
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ce "dommage" est corrigé en C++/CLI, qui fait la différence entre les deux (new vs. gcnew).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #40
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    On utilise le code 2 et uniquement le 2!
    Oui... mais uniquement parceque le std::string est un TYPE....
    Si c'était un objet....

    Java ne propose pas de "TYPE", et on est obligé de passer par un objet, c'est CA la grosse différence (et la raison des 'new' partout ).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Conseils pour débuter en Java
    Par flamant dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 09/03/2007, 11h30
  2. Besoin d'aide pour passage d'un algo au langage JAVA
    Par Spinoza23 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 16/02/2007, 15h33
  3. conseil pour un noob de java
    Par Th3dJoBiN dans le forum Langage
    Réponses: 3
    Dernier message: 11/12/2006, 15h13
  4. [Débutant] Conseils pour apprendre Java
    Par emary dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2006, 23h31
  5. Besoin de quelques conseils pour un script java
    Par poussin544 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/03/2006, 10h41

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