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
    Membre confirm�
    Inscrit en
    Ao�t 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 109
    Par d�faut C++ vs C
    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)?

    C'est pour me forcer a programmer en C++ au lieu de me retrancher a chaque fois derriere le C.

    Merci d'avance.
      0  0

  2. #2
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    Peu importe, il est possible de faire du code objet en C...

    Mais c'est franchement la galere...
      0  0

  3. #3
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par d�faut
    tu peux tout faire avec tout. Tu peux choisir de traverser l'atlantique � la nage alors qu'il y des bateaux ou des avions. Comme dirais l'autre, c'est ton choix.

    sinon pour l'exemple:

    class balle avec une methode virtuelle Dessiner()
    class balleCouleur herit� de balle ou on a reecrit la methode Dessiner() pour dessiner la balle en couleur

    hop, un sac de balle avec de tout ( balle normal et balle de couleur )

    et la tu fais :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    for( i=0; i<Nb_max_balle; i++ )
    {
         Sac[i]->Dessiner();
    }

    bah si les balles sont de couleurs ca dessinera des couleurs et si elles sont "normales" bah elle seront en noir et blanc.

    ca s'appelle le polymorphisme, c'est bien pratique
      0  0

  4. #4
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    En fait le probleme est mal pos�...

    tu peux faire de l'objet en C.
    tu peux faire du non-objet en C++.

    L'interet de l'objet c'est l'encapsulation des donn�es qui te donne une plus grande maitrise sur les acces a ces donn�es...

    Ensuite l'heritage et le polymorphisme te permettent d'abstraire ces donn�es (exemple de la balle plus haut)

    L'interet du C++ c'est qu'il te fournit tous les outils pour faire cela facilement et sans risques... En c c'est possible mais c'est bcp de travail pour un resultat peu lisible...
      0  0

  5. #5
    Membre confirm�
    Profil pro
    Ing�nieur R&D
    Inscrit en
    Juillet 2002
    Messages
    81
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 81
    Par d�faut
    faire de l'objet en C
    Je me demandais justement comment... Des exemples ? (et non, ca ne vaut pas dire que je n'y crois pas, je veux juste savoir comment on fait )
      0  0

  6. #6
    Expert �minent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retrait�
    Inscrit en
    D�cembre 2003
    Messages
    14 512
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 14 512
    Par d�faut
    Citation Envoy� par Magus (Dave)
    Je me demandais justement comment... Des exemples ? (et non, ca ne vaut pas dire que je n'y crois pas, je veux juste savoir comment on fait )
    Initiation :

    Les types abstraits de donn�es (ADT)

    Cours complet :

    http://ldeniau.web.cern.ch/ldeniau/oopc.html
      0  0

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    42
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Par d�faut
    Pour r�pondre � la question de d�part, � savoir d�bat sur le C vs C++, je dirai que c'est avant tout une vision de programmer.

    Si tu n'arrives pas � "pens�e objet", � mod�liser l'ensemble de ton futur programme en objet, alors soit que tu pratiques pour te forcer � tout concevoir en objet, soit que tu te diriges vers le C car tu es plut�t dans la programmation imp�rative.

    Personnellement, j'aime le C autant que le C++ . J'ai plus pratiqu� le C que le C++ mais je dois dire qu'une fois que tu as le r�flexe de voir objet, alors tu profites mieux du langage.
      0  0

  8. #8
    Membre chevronn�
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par d�faut
    Citation Envoy� par GarulfoLinux
    Pour r�pondre � la question de d�part, � savoir d�bat sur le C vs C++, je dirai que c'est avant tout une vision de programmer.

    Si tu n'arrives pas � "pens�e objet", � mod�liser l'ensemble de ton futur programme en objet, alors soit que tu pratiques pour te forcer � tout concevoir en objet, soit que tu te diriges vers le C car tu es plut�t dans la programmation imp�rative.

    Personnellement, j'aime le C autant que le C++ . J'ai plus pratiqu� le C que le C++ mais je dois dire qu'une fois que tu as le r�flexe de voir objet, alors tu profites mieux du langage.
    Je pense pas qu'on puisse dire que la programmation objet repr�sente correctement la rupture entre C et C++, en effet, on peut tr�s bien faire de la programmation 100% imp�rative en C++, et faire de la programmation objet (bon on gal�re sur l'h�ritage par contre) en C (j'adore en faire )...
    L'une des diff�rences majeures que je vois entre le C et le C++ c'est surtout le syst�me de surcharge du C++ (des op�rateurs et fonctions) qui permet de beaucoup simplifier la syntaxe, ainsi que les templates, ou encore les flux... La POO en elle-m�me ne fait pas tellement la diff�rence, mise � part l'h�ritage et le fait de mettre en une seule structure les m�thodes et les attributs.
      0  0

  9. #9
    Membre exp�riment�

    Inscrit en
    Juin 2002
    Messages
    97
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Par d�faut
    Version C++
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    class Obj{
    	//des choses et d'autres
    	void Secouer(int nbfois){
    		//blabla
    	}
    };
    Version adapt�e en C
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    struct Obj{
    	//des choses et d'autres
    };
     
    void ObjSecouer(struct Obj* this, int nbfois){
    	//blabla
    }
    On peut masquer les choses � l'utilisateur comme �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    //fichier user.h
    struct Obj;
    void ObjSecouer(struct Obj*, int nbfois);
    Ou comme �a, avec l'inconv�nient de devoir caster dans la fonction:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    //fichier user.h
    void ObjSecouer(void* unObj, int nbfois);

    Un truc dur � faire sans OO c'est des collections d'�l�ments cr�es � l'ex�cution par l'utilisateur.
    GUI, ou le sempiternel exemple de dessin avec des formes et m�thode "dessiner".
      0  0

  10. #10
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    Musaran a repondu en ce qui concerne l'encapsulation...

    pour l'heritage ca devient nettement moins beau...

    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
    struct Ball
    {
        void (*Draw)(void);
        ....
    };
     
    struct ColorBall
    {
       struct Ball Ball;
       ...
    }
     
    il faut alors un constructeur
    struct ColorBall* CreateColorBall(void)
    {
        struct ColorBall* result = (struct ColorBall *) (malloc(sizeof( struct ColorBall)));
        result.Ball.Draw = ColorBallDraw;
    ...   ...   ...
        return result;
    }
     
    du coup ton tableau deviens
     struct Ball * tab[Max_len];
    ...
    tab[i] = (struct Ball*) (CreateColorBall());
    ...
    et du coup tu peux faire
     
    tab[i]->Draw();
    Bien entendu ca fonctionne car la classe mere est en premier dans la calsse fille....
      0  0

  11. #11
    HRS
    HRS est d�connect�
    Membre chevronn�
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    D�tails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    Par d�faut
    curieux que vous vous sentiez oblig� de vous trouver des justificatifs
    pour utiliser le C++ plut�t que le C

    d'autant plus que faire de la POO sans discernement, comme c'�tait
    la mode il y a 10 ans, peut amener � des aberrations

    alors que les avantages sont palpables m�me sans la POO ou la STL

    - un compilateur + rigoureux, un typage + fort, entraine la d�tection
    des erreurs + t�t lors de la compilation, alors qu'auparavant ces
    m�mes erreurs n'�taient d�tect�es, dans le meilleurs des cas, qu'au
    moment des tests

    - simplification du code en rendant obsol�te l'emploi des directives
    pr�processeur (hormis #include)

    - gr�ce � l'utilisation du std::string pour les cha�nes de caract�res,
    on s'�conomise l'emploi de pointeurs dont l'usage est syst�matique
    en C et qui est � l'origine de nombreux dysfonctionnements. Sans
    pour autant se l'interdire en cas de n�cessit�.

    - Enfin le programmeur C++ peut se d�marquer de son coll�gue C.
    Ce dernier, sous pr�texte de faire des programmes v�loces et
    compacts, aime rendre son code imperm�able � la compr�hension
    d'autrui gr�ce � l'emploi "d'astuces" et raccourcis qui se r�v�leront
    des champs de mines quand il faudra modifier le programme 6 mois
    + tard suite � une demande d'�volution des clients
      0  0

  12. #12
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Citation Envoy� par HRS
    alors que les avantages sont palpables m�me sans la POO ou la STL

    - gr�ce � l'utilisation du std::string pour les cha�nes de caract�res,
    on s'�conomise l'emploi de pointeurs dont l'usage est syst�matique
    en C et qui est � l'origine de nombreux disfonctionnements. Sans
    pour autant se l'interdire en cas de ness�cit�.
    Il me semble que la classe string fait partie de la STL.

    Citation Envoy� par HRS
    - Enfin le programmeur C++ peut se d�marquer de son coll�gue C.
    Ce dernier, sous pr�texte de faire des programmes v�loces et
    compacts, aime rendre son code imperm�able � la compr�hension
    d'autrui gr�ce � l'emploi "d'astuces" et raccourcis qui se r�v�leront
    des champs de mines quand il faudra modifier le programme 6 mois
    + tard suite � une demande d'�volution des clients
    Ca ne depends pas du langage mais du programmeur, on peut programmer proprement en C ou magouiller enormement en C++.
      0  0

  13. #13
    Membre �m�rite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par d�faut
    Moi il y a autre chose que je comprends pas. Si j'ecris un code en C il sera evidement compilable par un compilateur C++. Lorsque j'ecris mon code, si je veux je peux ecrie quelque chose qui respecte enti�rement les normes C et le compiler (M�me si mon compilateur est C++, le programme reste en C). Si maintenant je veux rajouter soit une derivation, soit des templates ou je ne sait quoi, mon programme devient C++. Au niveau du langae le C++ c'est du C avec des trucs en plus, ici il n'y a pas tellement de choix a faire.

    Maintenant au niveau des fonctions. De la meme mani�re je programme qqchose je ne sait pas si c'est du C ou du C++. Je peux utiliser les fonctions standard C que mon programme soit en C ou en C++, rien ne me l'interdit, et c'est m�me parfois tr�s utile. Ici encore les fonctions standard C++ ne remplacenet pas les fonctions Standard C. Donc ou est le choix ?

    En gros ma question est : si je code quelque chose qui contient uniquement des instructions et fonctions qui existe dans le standard C. Comment je sait si le programme et C ou C++ ? A l'extension du fichier ?

    Blustuff.
      0  0

  14. #14
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Citation Envoy� par Blustuff
    Moi il y a autre chose que je comprends pas. Si j'ecris un code en C il sera evidement compilable par un compilateur C++.
    Ce n'est pas tout a fait vrai, il existe qq cas qui ne fonctionne pas.
      0  0

  15. #15
    Membre exp�riment�

    Inscrit en
    Juin 2002
    Messages
    97
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Par d�faut
    Citation Envoy� par HRS
    "curieux que vous vous sentiez oblig� de vous trouver des justificatifs pour utiliser le C++ plut�t que le C
    Ce n'est pas l'impression que j'ai.
    On explique simplement le b�n�fice bien r�el que �a apporte.
    Je suis d'ailleurs bien d'accord avec le reste de ton post, � tel point que ne comprends pas l'utilit� de rester en C (pour le programmeur).


    Citation Envoy� par Blustuff
    "Si j'ecris un code en C il sera evidement compilable par un compilateur C++.
    Pas forc�ment, il y a des constructions ambig�es, mais c'est maintenu � un minimum.

    Ici encore les fonctions standard C++ ne remplacenet pas les fonctions Standard C. Donc ou est le choix ?
    Si, le C++ a des rempla�ant pour beaucoup de fonctions C.
    cin et cout sont beaucoup plus s�r et g�n�riques que scanf et printf par exemple.

    Comment je sait si le programme et C ou C++ ? A l'extension du fichier ?
    Presque.
    Chacun doit savoir ce qu'il fait.
    Includes sans ".h", surcharge, m�thode d'objet, op�rateurs sur types utilisateurs, tout �a c'est C++.
      0  0

  16. #16
    Membre �m�rite
    Avatar de Geronimo
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    156
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 156
    Par d�faut
    Pour r�pondre � la question initiale, je ne pense pas que des algorithmes soient vraiment improgrammables en C sans POO.

    Cependant, au niveau global d'un programme, la POO permet de tr�s bien organiser ses donn�es et de les g�rer tr�s facilement.

    Consid�re un projet comme Age of Empires 2, par exemple. Eh bien tr�s probablement, tu dois avoir une classe g�n�rique Unite dont h�rite des classes Bateau, Terrestre et de chacune de celles-ci pourraient h�riter les unit�s Galion, Transport ou bien Cavalier, Champion, etc...

    Comme tu le vois dans cet exemple, tu constates que l'avantage de la POO et de coller tr�s pratiquement � la r�alit� (du jeu) et d'�tre tr�s coh�rente.
      0  0

  17. #17
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    Ao�t 2002
    Messages
    1 091
    D�tails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activit� : Programmeur

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 1 091
    Par d�faut Re: C++ vs C
    Citation Envoy� par blue
    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)?
    ca n'existe pas.
    Tout est faisable en langage machine aussi
    (c'est le seul langage universellement utilise )

    Par contre un certain nombre de structures qui rendent le developpement
    plus "facile" existent en C++ et ne sont pas disponibles en C.

    Exemples: templates, constructeurs et destructeurs (du code appele automatiquement => auto pointers ou smart pointers), la surcharge.
    Bref tout ce qui t'evite d'avoir a retaper du code et te permet egalement d'automatiser des taches que le programmeur C aura tendance a negliger..

    Bref, a mon avis ce genre de questions est principalement due a un manque d'experience..

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA
      0  0

  18. #18
    mat.M
    Invit�(e)
    Par d�faut
    Citation Envoy� par HRS
    et raccourcis qui se r�v�leront
    des champs de mines quand il faudra modifier le programme 6 mois
    + tard suite � une demande d'�volution des clients
    J'ai d�j� �t� confront� � ce probl�me l� , dans une SSII ,mais ce n'�tait pas un projet en C++ .
    Et les champs de mines c'est mortel , si on prend au pied de la lettre la m�taphore ou non
    Pour ceux qui se posent la question choisir C ou C++ , lire le bouquin de Stroustrup et essayez de comprendre sa philosophie.
    L'avantage du C++ c'est que cela �vite le recours aux variables globales ou d�clar�es dans tous les sens mais en revanche un projet avec de nombreuses classes et un h�ritage complexe peut nuire aux p�res formances.
      0  0

  19. #19
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par d�faut
    contrairement a ce que j'ai pu lire plus haut, on peux faire ca en C :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main(int ac, char **av)
    {
      int c;
     
      int funk(int a, int b)
      {
         return (a+b);
      }
     
      c = funk(5,6);
     
      return 0;
    }
    la fonction funk ne sera ainsi accessible que dans le main (c'est une espece de fonction "priv�" :-).
      0  0

  20. #20
    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 pada51
    contrairement a ce que j'ai pu lire plus haut, on peux faire ca en C :
    Non (mais gcc a une extension qui le permet).
      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