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 :

Cinq mythes courants sur le C++ (traduction d'un article de Bjarne Stroustrup) [Tutoriel]


Sujet :

C++

  1. #21
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je suis en parti d'accord avec acx01b.

    Le but n'est pas de faire apprendre toute l'informatique aux étudiants, mais de leur apprendre à apprendre.

    En effet, il n'est pas possible en 8 ans de devenir un expert en tout et tout au long de notre carrière, les technologies sont susceptibles de s'améliorer, d'évoluer, de changer. Ce n'est pas parce qu'on sort d'école qu'on cesse d'apprendre, sauf que là, il faudra apprendre en autodidacte. Le but n'est pas d'avoir une masse de connaissance, mais de pouvoir s'adapter à chaque situations.

    Pour cela, il faut donner des bases et une culture informatique aux étudiants. Apprendre par cœur toute l'API Java, c'est impressionnant mais pas très utile.

    D'un autre côté, on ne peut pas se contenter de tout survoler, ni même de tout survoler. Il faut bien à un moment ou à un autre approfondir un langage, ne serait-ce que pour se rendre compte de sa complexité et de sa puissance.
    Donc oui, malheureusement, on est contraint à faire des choix, on ne peut pas tout apprendre.

  2. #22
    Membre chevronné

    Homme Profil pro
    ingénieur de recherche
    Inscrit en
    Mars 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ingénieur de recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 103
    Par défaut
    Je suis d'avis qu'il faut connaître le C pour bien utiliser le C++, et qu'il ne faut pas séparer ces deux langages.

    Personnellement lorsque que j'ai commencé à passer du C au C++, j'était méfiant, J'allais jusqu'à faire des sorties assembleur avec gcc pour voir les différences entre le code C et le code C++. J'avais peur pour la rapidité d'exécution entre autre, et la lourdeur du code. Mais au final le C++ donne des programmes très optimisés. Il faut ce dire que tout ce que cache le C++ au profit de la "beauté du code" est réalisé aussi bien voir mieux que le C. D'un autre côté, pas de miracle, si le C++ donne une certaine liberté, son utilisation coûte autant au niveau complexité que la même liberté que l'on ce serait octroyée en C. C'est d'ailleurs là qu'il faut faire attention.

    Ainsi je pense qu'il vaut mieux apprendre le C pour mieux comprendre le C++. De plus je trouve inutile de débuter le c++ en apprenant les dernières spécificité de celui-ci, je pense par exemple à la manipulation des strings, ou au constructeur qui accepte une liste d'initialisation définie à l'aide des crochets. Pour moi ces propriétés relèvent plus du gadget. Le C++ ne se réduit pas à ses fonctionnalités de manipulations de caractère...

    Pour autant je trouve le C++ très puissant et je conseil son utilisation au profit du C. D'ailleurs le C est totalement compatible avec le C++, à la différence que le compilateur C++ est souvent plus efficace et plus sûr. Alors quitte à garder ses habitudes C et utiliser quelques fonctionnalité du C++ qui nous plaise, pas de problème! Et si l'on veut aller plus loin dans le C++ on n'est pas pour autant obligé d'utiliser toutes ses fonctionnalités. On peut trouver certaines fonctionnalité lourdes et dangereuse. Et le choix est vite fait! : Si l'on a fait du C et que l'on a ses règles : On prend les possibilités du C++ qui donnent un équivalent en C qui respecte les règles que l'on s'est donné. Par exemple :

    En C est ce que j'utilise des pointeurs de fonctions à tout bout de champ? Non! -> Pas de fonctions virtuelles en C++.
    En C est-ce que je fait une structure qui pourra fonctionner avec plusieurs types en même temps et perdre le typage, ou est ce que je fais une structure pour chaque type et garder le typage? Une structure par type! Le typage avant tout! -> On utilise les template en C++ pour nous faciliter la tâche.

    Finalement j'utilise le C++ pour ses templates, sa surcharge d'opérateur, ses constructeur/destructeur, et c'est tout.
    Mes tutoriels avancés sur la triangulation par filet à surface et sur les octree - N'hésitez pas à consulter les tutoriels et FAQ 2D/3D/jeux.

  3. #23
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Citation Envoyé par PierroVsf Voir le message
    Ainsi je pense qu'il vaut mieux apprendre le C pour mieux comprendre le C++.
    Tu penses, mais tu ne donnes pas d’arguments...

    De plus je trouve inutile de débuter le c++ en apprenant les dernières spécificité de celui-ci, je pense par exemple à la manipulation des strings
    Et pourtant, les strings, c’est l’exemple type de pourquoi c’est plus simple d’apprendre directement le C++. En C, il faut comprendre que les chaînes sont terminées par \0, mais pas toujours, que ce sont des tableaux, que souvent il faut passer la taille avec, mais pas toujours, etc. En C++, tu as un objet std::string qui est là et fait à peu près ce qu’on attend de lui.

  4. #24
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par PierroVsf Voir le message
    Je suis d'avis qu'il faut connaître le C pour bien utiliser le C++, et qu'il ne faut pas séparer ces deux langages.
    Permet moi de ne pas être d'accord avec toi (et d'argumenter sur ce point en sus):

    De nombreuses techniques issues du C, indispensables en C sont purement et simplement nocives et contre productives en C.

    Tout ce qui rattache le C++ au C, c'est la syntaxe (et encore, on ne peut le dire que pour le sous ensemble commun entre C et C++), autrement, ce sont deux langages fondamentalement différents, à l'instar du latin de Jules Cesar et du français actuel.

    Je ne nie absolument pas l'intérêt que peut apporter la connaissance du latin de Jules Cesar dans la compréhension que l'on peut avoir du français moderne, tout comme je ne nie pas l'intérêt qu'il peut y avoir à connaitre le C pour comprendre les rouages du C++.

    Par contre, tu conviendra avec moi que la connaissance du latin de Jules Cesar ne peut absolument pas être considérée comme un prérequis à l'apprentissage du français moderne, autrement, nous n'apprendrions pas à parler avant la première année de collège!!!

    Et si tu convient de cela pour le latin et le français, tu dois également en convenir pour ce qui concerne le C et le C++. Simplement parce que ce sont des langages fort proches, mais fondamentalement différents
    Personnellement lorsque que j'ai commencé à passer du C au C++, j'était méfiant, J'allais jusqu'à faire des sorties assembleur avec gcc pour voir les différences entre le code C et le code
    Mmmhh... Oui, en fait, passons... C'est à vrai dire une excellente chose que de s'interroger sur l'efficacité des outils mis à sa disposition
    Ainsi je pense qu'il vaut mieux apprendre le C pour mieux comprendre le C++.
    Nuançons un peu les choses : si tu veux comprendre l'intérieur des rouages du C++, la connaissance de C t'y aidera très certainement.

    Mais le fait est que, sauf exception, il n'y a absolument aucune raison de s'intéresser réellement au rouages du C++. dans la plupart des cas, on se contente d'utiliser les fonctionnalités "de surface" qu'il nous propose; tout comme on se contente généralement d'utiliser fopen (et autre fonctions associées aux fichiers) sans commencer à s'inquiéter de la composition réelle de la structure FILE et de la manière dont elle est traitée par les dites fonctions

    Mieux (ou pire, c'est selon) encore : la gestion dynamique de la mémoire est un processus qu'il est indispensable d'assimiler très rapidement en C; on n'a purement et simplement pas le choix. Mais c'est un processus particulièrement complexe à comprendre, à assimiler et, surtout, à maitriser suffisamment en C++ pour éviter les catastrophes (un peu moins en C, grâce à l'absence de système d'exceptions, comme on en retrouve en C++)

    Or, C++ nous permet de postposer toute la problématique jusqu'à un moment où l'on en aura vraiment besoin (lorsqu'il commence à être question d'héritage et de polymorphisme), nous permettant d'attendre de nous être approprié un minimum le langage et d'avoir acquis un minimum d'expérience avant de devoir nous frotter au problème.

    Cela rend la courbe d'apprentissage beaucoup plus facile à suivre
    De plus je trouve inutile de débuter le c++ en apprenant les dernières spécificité de celui-ci, je pense par exemple à la manipulation des strings, ou au constructeur qui accepte une liste d'initialisation définie à l'aide des crochets.Pour moi ces propriétés relèvent plus du gadget.
    Sur ce point non plus, je ne suis pas d'accord.

    La manipulation des chaines de caractères est un véritable calvaire en C. A moins, bien sur, de définir une taille arbitraire une bonne fois pour toutes pour tes chaines de caractères... Avec tous les problèmes que cela sous-entend

    Or l'utilisation et la manipulation des chaines de caractères est une constante dans tout programme : tôt ou tard, on voudra récupérer, afficher ou transmettre une information sous cette forme. La classe std::string (et ses consoeurs) nous permet de manipuler ce genre de donnée en nous concentrant sur les manipulations que nous devons faire au lieu de passer notre temps à nous inquiéter de savoir si "mais aurai-je assez d'espace pour stocker tout cela".

    L'utilisation des accolades pour les listes d'initialisateurs est loin d'être un gadget, mais permet de résoudre une problématique réelle. un simple exemple : que fait, à ton avis un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class MaClasse{
        /* on se fout pas mal du contenu
    };
    int main(){
        MaClasse foo();
    }
    Le résultat n'est absolument pas ce que tu pourrais croire à la première lecture et en suivant ta première intuition

    Le C++ ne se réduit pas à ses fonctionnalités de manipulations de caractère...
    sur ce point, au moins, nous sommes d'accord

    Mais la conclusion que l'on en tire est radicalement différente :boom:

    Car il faut te dire que la manipulation de chaine de caractères est une constante importante de n'importe quel programme, développé dans n'importe quel langage. En particulier lorsqu'il est question de transmettre des informations à l'utilisateur
    En C est ce que j'utilise des pointeurs de fonctions à tout bout de champ? Non! -> Pas de fonctions virtuelles en C++.
    Pas de fonction virtuelle-->pas d'héritage -->soit de sérieux problèmes de conception, soit, tu te limites vraiment dans l'utilisation des possibilités offertes par le langage (et, s'il n'était question que de cela, tu aurais sans doute intérêt à rester en C qui est malgré tout moins complexe )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #25
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    j'adore c++ et ses dernières evolutions, je suis impatient de voir la norme c++23 etc (surtout la réflexion de Herb Sutter).

    Par contre le problème est de pouvoir travailler sur du code base propre. J'ai au boulot un code C# mais genre grosse bouse, fait à l'arrache, par des personnes qui sont partis. et c'est du c#... On galère un max pour remettre ça bien !

    vous imaginez du c++ ? quand je vois le massacre en c#, j'ai du mal a imaginer ce que ca doit être en c++.
    Est-ce que quelqu'un a eu cette expérience ?

  6. #26
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 050
    Par défaut
    J'imagine bien un projet C# CLI C++. Je n'ai jamais vu de projet qui n'avait pas de problème avec ce mélange mais c'est hors sujet

Discussions similaires

  1. Sélectionner des dates courant sur plusieurs mois
    Par Christophe Charron dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/01/2009, 15h03
  2. [JSTL] Item courant sur <c:forEach..>
    Par ginkas31 dans le forum Taglibs
    Réponses: 3
    Dernier message: 19/02/2008, 20h11
  3. Marquer le noeuds courant sur une treeView
    Par Lynecoln dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/11/2006, 10h11
  4. [Derby] Requete date courante sur un champ Timestamp
    Par spekal dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/09/2006, 11h54
  5. courant sur port extern
    Par bobymaw dans le forum C++Builder
    Réponses: 16
    Dernier message: 06/05/2004, 14h16

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