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 :

C++ vs C [D�bat]


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par Luc Hermitte
    printf et scanf moins compliqu�s ?
    non l� j'appr�cie cin et cout ... je parlais de fprintf et fscanf , lecture/�criture ds un fichier


    d'ailleurs a propos des pointeurs : j'ai pris l'habitude des pointeurs que je passe en param�tres des fonctions:

    double* fonction( int *a, char[] name)
    si j'ai bien compris en C++ les r�f�rences permettent de simplifier l'utilisation des pointeurs, pas besoin de se demander si c'est un pointeur ou pas:

    &double fonction( int &a, char &name) ???
    mais je me suis toujours pas d�cid� a remplacer mes * par des & ...
      0  0

  2. #2
    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
    Oui mais non. Pas l�!
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::vector<double> f(std::vector<int> const &, std::string const &)
    Les r�f�rences, ne s'utilisent pas pour acc�der au premier �l�ment des tableaux.

    En param�tre, on va garder les pointeurs pour les gros objets optionnels.

    Pour ce qui est des fichiers. Soit je pr�f�re passer par des biblioth�ques sp�cialis�es soit, par des parseurs (qui eux utilisent souvent le couple du C) qui me permettent de mieux contr�ler les ereurs de format possibles.
    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...
      0  0

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    ok

    je vais continuer gentiment avec mes pointeurs pour l'instant

    merci
      0  0

  4. #4
    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
    Par d�faut
    Luc Hermitte, pourquoi n�cessairement remplacer les tableaux par des vecteurs ?
      0  0

  5. #5
    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
    Euh ... Oui, j'aurais du pr�ciser. Cet exemple c'�tait pour montrer le seul type d'utilisation de r�f�rences que je voyais dans le cadre de passage de tableaux.
    Les vecteurs ont divers avantages, mais pas exactement au niveau des passages de param�tres (autre que l'on en �conomise un qui avait �t� oubli� ici).

    En revanche, je pense qu'il manquait clairement des const dans le premier code, un tout du moins.
    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...
      0  0

  6. #6
    Membre �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par d�faut
    Bonjour,

    Les vectors sont utiles quand on veut une don�e extensible facilement et s�re, avec les m�mes performances d'acc�s et simpliciter d'ecriture qu'un tableau.

    Cependant, m�me si la taille est statique, il est int�ressant de passer par la classe vector, pour les op�rations de recherche...

    Mias, on ne d�vie pas un peu du sujet l�
      0  0

  7. #7
    Membre chevronn�
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Par d�faut
    Citation Envoy� par Caine
    Bonjour,

    Les vectors sont utiles quand on veut une don�e extensible facilement et s�re, avec les m�mes performances d'acc�s et simpliciter d'ecriture qu'un tableau.

    Cependant, m�me si la taille est statique, il est int�ressant de passer par la classe vector, pour les op�rations de recherche...

    Mias, on ne d�vie pas un peu du sujet l�
    A ce sujet, boost::array permet d'avoir les avantages d'un vector pour un tableau de taille fixe, tout en �tant plus rapide puisque le redimensionnement n'est pas g�r�
      0  0

  8. #8
    Invit� de passage
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 2
    Par d�faut
    Il n'y a absolument aucun algorithme que l'on ne peut r�soudre que en programmation orient�e objet.
    Une machine de turing peut r�soudre n'importe quel algorithme.
    ps: une machine de turing est s�quentielle.
      0  0

  9. #9
    Invit� de passage
    Inscrit en
    Septembre 2005
    Messages
    1
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 1
    Par d�faut
    Bonjour,
    qlq'un connaitrait il un exemple d'algorithme qui ne pourrait etre resolu qu'en programmation OO (ou alors tres difficilement par un autre type de programmation)?
    Normalement le concept objet et d'orienter la programmation autour des donn�es ,ce qui fait que les donn�s sont reutlisables pour des traitements differents .Tu pourraiias aussi ecrire du code c a l'interieur du c++:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    extern "c"{
    declarations en c
    }
      0  0

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Citation Envoy� par boulde
    si j'ai bien compris en C++ les r�f�rences permettent de simplifier l'utilisation des pointeurs, pas besoin de se demander si c'est un pointeur ou pas:
    &double fonction( int &a, char &name) ???
    mais je me suis toujours pas d�cid� a remplacer mes * par des & ...
    Au contraire, les r�f�rences nuisent � la lisibilit� du code: tu lis ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    cout << a.b;
    fonction(a);
    cout << a.b; // ?? a.b vient de changer? C'est pourtant pas un pointeur!!
    Et si tu lis ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    printf("%08X", a.b); // PS: comment on fait de l'hexa sur 8 chiffres avec cout ?
    fonction(&a);        //Ah, un pointeur. S'il n'est pas const, il pourrait bien modifier...
    printf("%08X", a.b); //Ah, ben oui il modifie...
    Pour moi, les r�f�rences, c'est � n'utiliser que l� o� les pointeurs ne marchent pas : Les surcharges d'op�rateurs, par exemple (et encore, attention aux plaisantins qui s'amusent � modifier une valeur qu'on ne s'attend pas � ce que l'op modifie...

    Mais les r�f�rences mises � part, le C++ est plein d'avantages. La facilit� de programmation orient�e objet est bien utile.
    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.
      0  0

  11. #11
    Membre �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par d�faut
    Personnellement je trouve que les r�f�rences rendent le code plus facile � lire.

    Mais elles sont l� surtout pour emp�cher de passer des pointeurs nuls. Finis la programmation d�fensive � outrance sur (pointeur != NULL).
      0  0

  12. #12
    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
    Citation Envoy� par M�dinoc
    Au contraire, les r�f�rences nuisent � la lisibilit� du code: tu lis ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    cout << a.b;
    fonction(a);
    cout << a.b; // ?? a.b vient de changer? C'est pourtant pas un pointeur!!
    Quand je lis ceci, je trouve que des baffes se perdent. On n'appelle pas une fonction "fonction". Plus s�rieusement, bien que cela soit la m�me id�e, il est bon que le r�le de la fonction, et/ou ce qu'elle va faire de ses param�tres, transparaisse dans son nom. Au pire dans tous les cas, c'est document�.

    Et puis on n'appelle pas une fonction sans savoir ce qu'elle fait, non ? Si dans la signature j'ai une r�f�rence non constante, je sais que le param�tre en en [out], voire [in,out]. Mais certainement pas en [in]. Et quand ce n'est pas le cas, j'ai tendance � faire savoir que c'est n'importe quoi et je remets les consts oubli�s.

    En g�n�ral, j'ai des pointeurs bruts quand la s�mantique des op�rations mises en oeuvre le requiert.
    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...
      0  1

  13. #13
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Citation Envoy� par Luc Hermitte
    Et puis on n'appelle pas une fonction sans savoir ce qu'elle fait, non ?
    J'ai jamais dit que c'�tait moi qui l'appelais... Quand tu regardes le code d'un autre et que tu essaies de le comprendre (surtout s'il n'est pas assez comment�) C'est pas �vident...

    (quant � la signature de fonction, on n'a pas toujours une IDE qui l'affiche...)
    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.
      0  0

  14. #14
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    C'�tait un exemple je pense . Vu que souvent les fonctions sont mal nomm�es �a se d�fend. Si les pointeurs pouvaient lever l'ambiguit�, ce serait un plus. Si ils pouvaient... Car ton argumentaire ne tient pas:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    fonction(&a);        //Ah, un pointeur. S'il n'est pas const, il pourrait bien modifier...
    il pourrait, mais on n'en sait rien, strictement rien. Pour �tre fix�, il faut aller regarder le prototype de fonction, si c'est
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void fonction( const A * );
    alors c'est pas modifi�, si c'est
    alors c'est certainement modifi�. Et avec les r�f�rences, c'est exactement la m�me chose. Si c'est
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void fonction( const A & );
    alors c'est pas modifi�, si c'est
    alors c'est certainement modifi�.
    Donc les r�f�rence peuvent peut �tre dissimuler la modification d'une variable (si le nom de la fonction est mal choisi etc...), mais les pointeurs � l'inverse font syst�matiquement penser que la variable est modifi�e. Donc faut pas se fier � �a pour d�terminer si une var est modifi�e ou non.
      0  0

  15. #15
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    En effet, il ne faut pas forc�ment s'y fier. Mais le & encourage � regarder le prototype, alors que quand on vient comme moi du C, on n'a pas encore forc�ment le r�flexe de se dire "mince, �a pourrait bien �tre une r�f�rence, donc j'ai int�ret � regarder".
    Quand en C, on regarde le code d'un autre avec des tas de fonctions, on n'a pas toujours le temps de faire �a...

    Enfin, c'est un r�flexe suppl�mentaire � prendre. C'est toujours mieux que "int &b = a" (l'esprit humain a tendance � interpr�ter le code en "assume no aliasing"). On finit par s'y retrouver, mais je trouve les pointeurs plus explicites (malgr� leur inconv�nient de pouvoir �tre NULL en param�tre).
    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.
      0  0

  16. #16
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    on n'a pas encore forc�ment le r�flexe de se dire "mince, �a pourrait bien �tre une r�f�rence, donc j'ai int�ret � regarder".
    Oui je comprend, je pensais �a aussi fut un temps. Maintenant je me dis que c'est pas sur ce m�canisme qu'il faut s'appuyer, mais sur des commentaires / choix judicieux de noms. En tous cas, je me souviens pas d'avoir �t� pi�g� � ce niveau. Par contre les pointeurs erron�s...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // initialiser A
    A a;
    if ( !read_from_config_file( a ) )
    {
        // erreur
    }
     
    // afficher
    print_infos( a );
    ce genre de code parle de lui m�me je pense. Si print_infos a un effet de bord et modifie a, c'est que c'est mal fichu. Avec ce code:
    si tu as le r�flexe d'aller voir le prototype de print_infos, je comprends pas pourquoi tu ne l'as pas avec la version sans pointeur.
      0  0

  17. #17
    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 � la r�ponse d'Aur�lien. Dans tous les cas il doit (*) y avoir des "const". Qu'il s'agisse de pointeur ou de r�f�rence.

    En ce qui me concerne, les passages de param�tres se font par :
    - r�f�rence-constante : "gros" objet en lecture seule
    - r�f�rence : objet en lecture et/ou �criture
    - valeur : "petit" objet en lecture seule ET qui dispose qu'une s�mantique de valeur en g�n�ral, ou juste copiable parfois seulement. (je ne suis pas trop un adepte de l'optimisation syst�matique propos�e par H.Sutter et A.Alexandrescu dans leur bouquin de qualit�)
    - pointeur (brut ou intelligent) : pour les param�tres optionnels ou qui sont vraiment des pointeurs dont la responsabilit� doit migr�e ou �tre partag�e.

    Je peux aussi garder des pointeurs quant il s'agit de r�f�rencer des objets dont on veut s'assurer que la dur�e de vie ex�de celle du r�f�rant.

    (*) Et quant ils ne sont pas explicites, on perd une apr�s-midi � rendre const-correct ce qui ne l'est pas -- largement r�compens�, AMHA, par les doutes et les traques de bugs qui nous seront �pargn�s.
    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...
      0  0

  18. #18
    Membre extr�mement actif

    Homme Profil pro
    Ing�nieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par d�faut
    Bonjour

    Avec �norm�ment de retard sur la discution, juste pour r�agir � ceci :

    Sinon en codant en C ou C++ avec des biblioth�ques portables, on arrive � faire fonctionner un executable sur autant de plate-formes que Java
    Oui mais cela n�cessite une recompilation. En java non.
      0  0

  19. #19
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par hegros
    Oui mais cela n�cessite une recompilation. En java non.
    Ah, que fait la JVM ? :-)
      0  0

  20. #20
    Membre extr�mement actif

    Homme Profil pro
    Ing�nieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par d�faut
    Citation Envoy� par Jean-Marc.Bourguet
    Citation Envoy� par hegros
    Oui mais cela n�cessite une recompilation. En java non.
    Ah, que fait la JVM ? :-)
    Ca me semble plus souple pour le developpement.
    De plus elle interprete du code ce n'est qu'apr�s qu'elle le compile et une seule fois biensur.

    M'enfin y'a du pour et du contre comme toujours je suppose
      0  0

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