Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Discussion fermée
 
Outils de la discussion
Publicité
'
Vieux 28/11/2002, 12h43   #1
blue
Nouveau Membre du Club
 
Inscription : août 2002
Messages : 109
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 109
Points : 32
Points : 32
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.
blue est déconnecté   Envoyer un message privé 00
Vieux 28/11/2002, 17h26   #2
Gandalf
Membre confirmé
 
Homme
Inscription : avril 2002
Messages : 279
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : avril 2002
Messages : 279
Points : 269
Points : 269
Peu importe, il est possible de faire du code objet en C...

Mais c'est franchement la galere...
Gandalf est déconnecté   Envoyer un message privé 00
Vieux 28/11/2002, 17h51   #3
la drogue c'est mal
Membre Expert
 
Avatar de la drogue c'est mal
 
Inscription : novembre 2002
Messages : 2 254
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 2 254
Points : 2 370
Points : 2 370
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 :
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
__________________
il y a du linge sur la corde à linge
la drogue c'est mal est déconnecté   Envoyer un message privé 00
Vieux 28/11/2002, 18h11   #4
Gandalf
Membre confirmé
 
Homme
Inscription : avril 2002
Messages : 279
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : avril 2002
Messages : 279
Points : 269
Points : 269
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...
Gandalf est déconnecté   Envoyer un message privé 00
Vieux 28/11/2002, 19h56   #5
Magus (Dave)
Membre du Club
 
David
Inscription : juillet 2002
Messages : 80
Détails du profil
Informations personnelles :
Nom : David
Âge : 28

Informations forums :
Inscription : juillet 2002
Messages : 80
Points : 48
Points : 48
Envoyer un message via MSN à Magus (Dave)
Citation:
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 )
Magus (Dave) est déconnecté   Envoyer un message privé 00
Vieux 29/11/2002, 05h06   #6
Musaran
Membre actif

 
Inscription : juin 2002
Messages : 97
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 97
Points : 166
Points : 166
Version C++
Code :
1
2
3
4
5
6
class Obj{
	//des choses et d'autres
	void Secouer(int nbfois){
		//blabla
	}
};
Version adaptée en C
Code :
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 :
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 :
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".
__________________
"J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
www.stroustrup.com
Musaran est déconnecté   Envoyer un message privé 00
Vieux 29/11/2002, 09h27   #7
Gandalf
Membre confirmé
 
Homme
Inscription : avril 2002
Messages : 279
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : avril 2002
Messages : 279
Points : 269
Points : 269
Musaran a repondu en ce qui concerne l'encapsulation...

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

Code :
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....
Gandalf est déconnecté   Envoyer un message privé 00
Vieux 29/11/2002, 09h42   #8
HRS
Membre éprouvé
 
Avatar de HRS
 
Inscription : mars 2002
Messages : 623
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 623
Points : 494
Points : 494
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
HRS est déconnecté   Envoyer un message privé 00
Vieux 29/11/2002, 11h17   #9
gl
Rédacteur/Modérateur
 
Homme
Inscription : juin 2002
Messages : 2 036
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 2 036
Points : 4 027
Points : 4 027
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++.
gl est déconnecté   Envoyer un message privé 00
Vieux 29/11/2002, 11h24   #10
Blustuff
Membre chevronné
 
Inscription : juillet 2002
Messages : 842
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 842
Points : 647
Points : 647
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.
Blustuff est déconnecté   Envoyer un message privé 00
Vieux 29/11/2002, 13h07   #11
gl
Rédacteur/Modérateur
 
Homme
Inscription : juin 2002
Messages : 2 036
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 2 036
Points : 4 027
Points : 4 027
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.
gl est déconnecté   Envoyer un message privé 00
Vieux 30/11/2002, 05h15   #12
Musaran
Membre actif

 
Inscription : juin 2002
Messages : 97
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 97
Points : 166
Points : 166
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.

Citation:
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.

Citation:
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++.
__________________
"J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
www.stroustrup.com
Musaran est déconnecté   Envoyer un message privé 00
Vieux 30/11/2002, 08h03   #13
Geronimo
Membre Expert
 
Avatar de Geronimo
 
Inscription : avril 2002
Messages : 156
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 156
Points : 1 745
Points : 1 745
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.
__________________
Une question concernant C++Builder ? Voici la réponse
Consultez aussi les tutoriels de qualité de la section C/C++
Geronimo est déconnecté   Envoyer un message privé 00
Vieux 03/12/2002, 01h02   #14
LeGreg
Membre Expert
 
Programmeur
Inscription : août 2002
Messages : 1 048
Détails du profil
Informations personnelles :
Localisation : Etats-Unis

Informations professionnelles :
Activité : Programmeur

Informations forums :
Inscription : août 2002
Messages : 1 048
Points : 1 578
Points : 1 578
Envoyer un message via ICQ à LeGreg
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
LeGreg est déconnecté   Envoyer un message privé 00
Vieux 23/12/2002, 18h36   #15
mat.M
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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.
  Envoyer un message privé 00
Vieux 28/02/2003, 18h34   #16
vieuxshell
Invité de passage
 
Inscription : février 2003
Messages : 1
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 1
Points : 1
Points : 1
Je déterre se sujet pour une petite question :

en quoi cin et cout sont plus sûr que scanf et prinftf ?
vieuxshell est déconnecté   Envoyer un message privé 00
Vieux 02/03/2003, 22h45   #17
LeGreg
Membre Expert
 
Programmeur
Inscription : août 2002
Messages : 1 048
Détails du profil
Informations personnelles :
Localisation : Etats-Unis

Informations professionnelles :
Activité : Programmeur

Informations forums :
Inscription : août 2002
Messages : 1 048
Points : 1 578
Points : 1 578
Envoyer un message via ICQ à LeGreg
c'est simple: avec printf, tu n'as aucune verification a la compilation du type des variables que tu lui passes en argument.
avec cin et cout, c'est le type des arguments qui determine la fonction qui sera appelée pour les afficher à l'écran grâce à la surcharge des opérateurs.
Un autre truc c'est que printf n'est pas extensible: tu ne peux créer de formats pour tes objets perso, alors que tu peux toujours redéfinir un nouvel opérateur de lecture ou d'ecriture dans un flux en C++.

LeGreg
LeGreg est déconnecté   Envoyer un message privé 00
Vieux 26/04/2003, 10h37   #18
sylvain114d
Membre du Club
 
Inscription : novembre 2002
Messages : 51
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 51
Points : 46
Points : 46
Envoyer un message via MSN à sylvain114d
Citation:
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 ?
oui, avec gcc ou le compilateur de visual, si tu nomes tes fichier en ".c", c'est le compilateur C qui est appellé. si tu mets l'extenssion ".cpp" c'est le compilateur C++ qui est appelé (dans le MAN de gcc c'est expliqué)

Enfin, un prog C ne compile pas forcement avec un copilo C++:
Par exemple, les definitions potentielles du C n'existent pas en C++...
Les caractere placé entre simple cote (ex: 'a' ) sont considéré comme des int en C et comme des char en C++...

ces incopatibilités dependent de la nomre du C et de la norme du C++ considérées (ANSI, ISO,....)

pour plus d'info:
http://perso.wanadoo.fr/cvincent/cou...atibilite.html
je sais pas si tout y est mais j'ai trouvé la page plutot bien.
sylvain114d est déconnecté   Envoyer un message privé 00
Vieux 20/05/2003, 10h09   #19
claudio.matzke
Candidat au titre de Membre du Club
 
Inscription : mai 2002
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 9
Points : 10
Points : 10
Par défaut et la conception???


Je suis étonné que, dans cette discussion, la question de l'analyse-conception OO ne soit jamais intervenue??

bah oui! à l'origine, que je sache, on a inventé la POO pour que le fossé entre objets "naturels" et programmation diminue.

Au début, pour résoudre un problème, des supra-mecs alignaient des 0 et des 1 dans une carte perforée (des trous ou pas des trous). Le fossé était alors ENORME. et puis on a fait de l'assembleur, très vite, du C et puis pour continuer à réduire l'écart ET DONC les COUTS DE PRODUCTIONS !!! du C++ : de l'objet. Ce qui permet d'avoir une approche composant. C'est comme ça que la plupart des RAD (surtout, à ma connaissance et à mon gout, ceux de Borland) offre des Objets tout fait et dont on peut hériter pour capitaliser les expériences...

Bref. pourquoi personne y dit ça???
claudio.matzke est déconnecté   Envoyer un message privé 00
Vieux 13/06/2003, 22h31   #20
alexrtz
Membre Expert
 
Avatar de alexrtz
 
Inscription : juin 2003
Messages : 622
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2003
Messages : 622
Points : 1 094
Points : 1 094
Je ne pense pas que ce soit un problème d'algo uniquement réalisables en C ou en C++, il faut juste voir quel langage te paraît plus adapté par rapport à ce que tu veux programmer.

Au pire pour les petits prog tu peux essayer de coder en C et en C++ pour te rendre compte quel est le langage qui colle mieux par rapport à ce que tu veux faire.
__________________
"Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."
alexrtz est déconnecté   Envoyer un message privé 00
Discussion fermée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h00.


 
 
 
 
Partenaires

Hébergement Web