OVH Cloud OVH Cloud

Débuter en C++

78 réponses
Avatar
H.
Bonsoir...

[Copie d'un message sur fr.comp.lang.c]
Bon, je sais, c'est une question de débutant, mais bon... je n'arrive
pas à trouver de réponses pertinentes sur internet ou dans la FAQ.
En gros, j'hésite à passer au langage C (je maîtrise bien GW Basic,
Turbo Pascal, PHP et quelques autres langages). Et j'hésite entre C et
C++... Je ne trouve pas de comparatif "pertinent" au sens ou je l'entend
(i.e.
pour débutant !), donc je me permets de poser quelques questions simples,
dont les réponses me permettront de choisir :
- quelle est la différence entre C et C++, "à part" que C++ permet la
programmation orientée objet ?
- peut-on programmer en C++ sans se servir dans l'immédiat de la
programmation orientée objet (autrement dit, apprendre progressivement, mais
juste sous C++) ?
- quel compliateur choisir (sur quels critères se baser ?) ? J'ai
téléchargé sans les installer Dév-C++ et MS Visual C++ 2005 Express
(gratuits).

En fait, mon objectif à court terme est de faire un programme spécifique
(évolutif et assez complexe) avec une interface graphique et une base de
données (j'ai l'habitude en PHP) :
- est-ce qu'il est possible (autrement dit pas trop complexe pour
quelqu'un qui débute avec ce langage), en C ou en C++, de faire "sa" base de
données avec des fichiers texte (sans se servir de SQL ou autres) ?
- pour les interfaces graphiques, d'après ce que j'ai lu, on en revient
toujours à l'OS, et puis ce n'est pas le sujet du forum, etc. Néanmoins, je
ne vois pas bien "comment" on peut s'occuper d'une interface graphique : par
l'intégration d'une bibliothèque spécifique ? Pour Windows, y en a-t-il une
qui soit relativement simple d'abord, ou, à défaut, quelle est la plus
répandue (et libre) ?


Cordialement,
Christophe

10 réponses

1 2 3 4 5
Avatar
Fabien LE LEZ
On Sat, 8 Jul 2006 16:37:33 +0200, ribolzi.christophe :

- quelle est la différence entre C et C++, "à part" que C++ permet la
programmation orientée objet ?
- peut-on programmer en C++ sans se servir dans l'immédiat de la
programmation orientée objet (autrement dit, apprendre progressivement, mais
juste sous C++) ?


Je ne suis pas trop sûr de ce que tu entends par "POO". Il me semble
que chaque programmeur a sa propre définition.

Puisque tu connais le PHP, j'y prends un exemple classique :

| $formulaire= array
| (
| array ("id" => "nom", "texte" => "Nom", "type_input" => "input"),
| array ("id" => "prenom", "texte" => "Prénom", "type_input" => "input"),
| array ("id" => "adresse", "texte" => "Adresse", "type_input" => "textarea"), // Plusieurs lignes
| array ("id" => "code_postal", "texte" => "Code postal", "type_input" => "input", "taille" => 5)
| );

Grosso modo, avec la syntaxe souple du PHP, j'ai défini quatre objets,
chacun ayant un membre "id", un membre "texte", etc.

Note que plus le programme PHP est complexe, plus on tend à utiliser
la "vraie" programmation objet de PHP, qui est basique mais rend bien
des services.

En PHP, les types de base (i.e. hors classes) sont des nombres, le
type "chaîne de caractères", et le type "tableau".

En C comme en C++, les types de base sont des nombres, et des
pointeurs. Il y a aussi une syntaxe spéciale qui permet d'obtenir
plusieurs objets de même type, ce qui ressemble à première vue à un
tableau de taille fixe.
On a aussi décrété qu'un "char" (entier sur 8 bits) représente un
caractère. Du coup, avec beaucoup de bonne volonté, on peut obtenir
l'abstraction "chaîne de caractères" avec des "char" consécutifs, et
un char égal à 0 pour indiquer la fin de chaîne.

En C, on en est à peu près là.

En C++, on a la notion de classe et d'objets.
Du coup, y'a des petits malins qui ont créé une classe "chaîne de
caractères", qui fonctionne grosso modo comme en PHP ou en Basic : un
objet "string" est une variable à part entière, qu'on peut concaténer,
passer comme retour de fonction, etc.
De même, on a différents types de tableaux, y compris le tableau
associatif cher à PHP.

Pour résumer ces considérations maladroites, je réponds à tes deux
questions :
- Si jamais tu veux utiliser des chaînes de caractères, des
tableaux, et quelques autres trucs du même style, tu vas en chier si
tu programmes en C. (Déjà que C++ est nettement moins agréable que PHP
pour le traitement de textes...)
- Tu peux effectivement apprendre le C++ progressivement. Par
contre, tu ne feras pas grand-chose sans utiliser des objets (au moins
"string") ; et, bien vite, tu t'apercevras que créer tes propres
classes (au moins au même niveau que ce qu'on a en PHP) facilite
vraiment la vie.

- quel compliateur choisir (sur quels critères se baser ?) ?


Le compilo n'a pas tant que ça d'importance, du moment qu'il soit
récent. Je te conseillerais plutôt d'avoir deux compilateurs, pour
vérifier que tu ne ponds pas du code spécifique aux idiosyncrasies
d'un compilo.

En fait, mon objectif à court terme est de faire un programme spécifique
(évolutif et assez complexe) avec une interface graphique et une base de
données (j'ai l'habitude en PHP) :


Houlà...

- est-ce qu'il est possible (autrement dit pas trop complexe pour
quelqu'un qui débute avec ce langage), en C ou en C++, de faire "sa" base de
données avec des fichiers texte (sans se servir de SQL ou autres) ?


En C++, oui -- tant que la taille des données ne dépasse pas quelques
Mo, ça ne pose pas le moindre problème.

C'est d'ailleurs nettement plus facile que d'attaquer une base MySQL,
contrairement à PHP qui fournit ça en standard.

Néanmoins, je
ne vois pas bien "comment" on peut s'occuper d'une interface graphique : par
l'intégration d'une bibliothèque spécifique ?


Oui.
C++ en lui-même n'apporte rien de ce côté.
En fait, ça peut paraître paradoxal, mais C++ est un langage à la fois
riche et nu : il y a pas mal de fonctionnalités qu'on trouve rarement
rassemblées dans un langage (templates, héritage multiple, etc.), mais
on est tout le temps obligé d'aller pêcher des bibliothèques ici ou
là.

Pour Windows, y en a-t-il une
qui soit relativement simple d'abord, ou, à défaut, quelle est la plus
répandue (et libre) ?


Du côté de chez Microsoft, il y a les MFC, assez mal faites et
obsolètes, et .Net, qui n'est pas vraiment compatible avec le C++.
Restent les bibliothèques multi-plate-formes : QT
<http://www.trolltech.com/products/qt> et wxWidgets
<http://wxwidgets.org/>.

Avatar
H.
Houuuu... tout ce que vous m'écrivez n'est pas pour me rassurer...

J'ai l'habitude des variables de type STRING (et encore plus des STRING
OF CHAR)... Mes DB SQL ne contiennent presque que des VARCHAR... et mon
projet est entièrement basé sur la gestion de chaînes de caractères.
Donc déjà, je m'oriente nettement vers C++, à cause de la classe (? oui
?) STRING.

Après tout, je peux bien passer à la programmation orientée OO, le tout
est que le jeu en vaille la chandelle. Cependant, j'ai lu que C/C++ sont des
langages à réserver plutôt à des futurs informaticiens, donc de nouveau un
argument en défaveur de C++.
Troisième et dernier argument : comment apprendre le C++ sans apprendre
le C ? Travailler sur le C d'abord ne me gène pas plus que ça, mais je
risque de griller rapidement le temps que j'ai de disponible et de me
retrouver avec rien... Donc est-il possible d'aller directement à C++ (c'est
une question plus sur les ouvrages et les sites web que sur la possibilité
théorique).

Pour les interfaces graphiques, j'ai relevé dans tous les fils :
- GTK2 ;
- QT ;
- wxWidgets.
Pour choisir, quelles questions dois-je me poser ?


Cordialement,
Christophe
Avatar
Fabien LE LEZ
On Sat, 8 Jul 2006 19:25:43 +0200, "H."
:

Troisième et dernier argument : comment apprendre le C++ sans apprendre
le C ?


Il n'y a aucune raison d'apprendre le C avant le C++.

Ces deux langages ont une syntaxe partiellement commune, mais tu
connais déjà cette syntaxe, puisque tu connais le PHP.

Ils ont par contre des "philosophies" de programmation différentes.
C++ me paraît plus proche de PHP que de C.

Après tout, je peux bien passer à la programmation orientée OO,


Carrément à la programmation orientée orienté objet ?

le tout est que le jeu en vaille la chandelle.


Si c'est pour coller une interface graphique sur une base de données,
il me semble que C++ est un mauvais choix, surtout quand on ne connaît
pas ce langage.

Essaie plutôt de coller une interface graphique sur PHP -- il me
semble que c'est faisable.
Sinon, y'a Python, qui semble assez simple.


PS : il est possible que je sois spécialement lent, mais ça fait plus
de six ans que j'essaie de comprendre quelque chose au C++, presque à
temps plein. Et je suis bien loin d'en avoir fait le tour.

Avatar
Sylvain
Fabien LE LEZ wrote on 08/07/2006 20:18:

Il n'y a aucune raison d'apprendre le C avant le C++.


hmmm, si les headers, les libs, les compilos eux-mêmes étaient
différents alors en effet il n'y aurait aucune raison (pas plus que
d'apprendre Fortran pour faire du cobol).

la réalité est différente non ? tout ce qui tient de la gestion de la
mémoire, les conventions d'appels, les primitives, les opérateurs (non
redéfinis) est la même il me semble.

<tant pis pour le trolesque>
les 2 s'apprennent très bien en simultané, quand on manipule des
concepts exigeants des opérations répétitives et verbieuses on fait du
C++ (en recourant à la STL ou à une hiérarchie maison), quand on code
une boucle et 2 globales on fait du C.
</tant pis pour le trolesque>

PS : il est possible que je sois spécialement lent, mais ça fait plus
de six ans que j'essaie de comprendre quelque chose au C++, presque à
temps plein. Et je suis bien loin d'en avoir fait le tour.


peut être cela influe tout jugement alors, si le but était de pouvoir
réciter le Stroustrup et la STL par coeur, alors en effet la plupart
n'en aurait pas fait le tour; si le but est (on ne peut) plus
pragmatique et vise à coder ce que l'on souhaite réaliser, C++ aidera le
travail en facilitant les dites opérations fastidieuses.

Sylvain.

Avatar
H.
Fabien LE LEZ :

Troisième et dernier argument : comment apprendre le C++ sans apprendre
le C ?


Il n'y a aucune raison d'apprendre le C avant le C++.
Ces deux langages ont une syntaxe partiellement commune, mais tu
connais déjà cette syntaxe, puisque tu connais le PHP.
Ils ont par contre des "philosophies" de programmation différentes.
C++ me paraît plus proche de PHP que de C.


Voir ce qu'en dit Sylvain...


Après tout, je peux bien passer à la programmation orientée OO,


Carrément à la programmation orientée orienté objet ?


Mdr je fais pas les choses à moitié ^^


Si c'est pour coller une interface graphique sur une base de données,
il me semble que C++ est un mauvais choix, surtout quand on ne connaît
pas ce langage.


Disons que la finalité est de faire un outil de gestion de base de
données, effectivement, mais ça ce n'est que la première moitié du
programme. La deuxième moitié (et la principale) est une gestion spécifique
des données, qui réclame entre autres une certaine souplesse par rapport au
type STRING, bien évidemment des fonctions de calcul et des variables
booléennes (avec des fonctions logiques aussi).


Essaie plutôt de coller une interface graphique sur PHP -- il me
semble que c'est faisable.


Oui... et c'est même fait... mais le problème c'est que pour faire
tourner mon bidule sur une machine, j'ai besoin d'installer un serveur, SQL
tout le tintouin avant. Donc pour l'export vers M. tout-le-monde c'est
coton...


Sinon, y'a Python, qui semble assez simple.


Assez simple... voire trop suivant certaines critiques...


Cordialement,
Christophe


Avatar
Fabien LE LEZ
On Sat, 8 Jul 2006 21:52:25 +0200, "H."
:

Voir ce qu'en dit Sylvain...


http://www.google.com/search?&q=usenet%20troll

Essaie plutôt de coller une interface graphique sur PHP -- il me
semble que c'est faisable.


Oui... et c'est même fait... mais le problème c'est que pour faire
tourner mon bidule sur une machine, j'ai besoin d'installer un serveur, SQL
tout le tintouin avant. Donc pour l'export vers M. tout-le-monde c'est
coton...


Effectivement, il y a le problème du déploiement.

Il y a un truc assez agréable à faire en C++ : une structure de
données "persistante", i.e. avec enregistrement sur disque quand le
programme se termine (ou à d'autres moments), et lecture de toute la
structure sur disque au démarrage du programme.

Grosso modo, on se retrouve avec un assez gros objet, éventuellement
avec une structure assez complexe, sur lequel on ajoute (si possible
dès le début) un système de sérialisation (celui de Boost par
exemple).

Tout ça marche très bien, et on se retrouve avec un seul .exe
(+ le(s) fichier(s) de données bien sûr), facile à déployer.


Avatar
James Kanze
Sylvain wrote:
Fabien LE LEZ wrote on 08/07/2006 20:18:


Il n'y a aucune raison d'apprendre le C avant le C++.



hmmm, si les headers, les libs, les compilos eux-mêmes étaient
différents alors en effet il n'y aurait aucune raison (pas
plus que d'apprendre Fortran pour faire du cobol).


Et en effet, les en-têtes, les bibliothèques et les compilateurs
eux-même sont bien différents. Il s'agit bien de deux langages
forts différents, quand même.

Sûrtout, la façon de faire des choses, même des choses les plus
fondamentales, est fort différente dans les deux langages.

la réalité est différente non ? tout ce qui tient de la
gestion de la mémoire, les conventions d'appels, les
primitives, les opérateurs (non redéfinis) est la même il me
semble.


Si tu crois ça, c'est que tu ne connais pas le C++.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Avatar
James Kanze
H. wrote:
Fabien LE LEZ :


Troisième et dernier argument : comment apprendre le C++ sans apprendre
le C ?
Il n'y a aucune raison d'apprendre le C avant le C++. Ces

deux langages ont une syntaxe partiellement commune, mais tu
connais déjà cette syntaxe, puisque tu connais le PHP. Ils
ont par contre des "philosophies" de programmation
différentes. C++ me paraît plus proche de PHP que de C.



Voir ce qu'en dit Sylvain...


Voir aussi sa participation dans d'autres threads ici. On
comprend vite qu'il ne connaît pas très bien le C++.

[...]
Oui... et c'est même fait... mais le problème c'est que pour faire
tourner mon bidule sur une machine, j'ai besoin d'installer un
serveur, SQL

tout le tintouin avant. Donc pour l'export vers M. tout-le-monde c'est
coton...


Si tu as besoin d'une base de données, tu as besoin d'une base de
données. Que tu écrives en C++ ou en quoique ce soit de l'autre.
(Ben, on peut écrire sa propre base de données en C++. Mais il
faut alors vraiment être expert.)

Sinon, y'a Python, qui semble assez simple.



Assez simple... voire trop suivant certaines critiques...


Je ne le connais pas, mais je n'en ai entendu que du bien.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34



Avatar
Fabien LE LEZ
On Sun, 09 Jul 2006 16:34:52 +0200, James Kanze :

Si tu as besoin d'une base de données, tu as besoin d'une base de
données.


Sauf cas spécifique (accès à une base de données existante, par
exemple), on n'a jamais *besoin* d'une base de données. On a un
problème, et utiliser une BdD classique (MySQL par exemple) peut être
une solution. Solution plus ou moins opportune selon les
circonstances.

Dans un script PHP sur un serveur web, l'usage d'une BdD (souvent
MySQL) est courant.

Dans un logiciel écrit en C++ et installé chez un grand nombre de
clients, c'est nettement moins conseillé, car ça complique
horriblement le déploiement, tout en n'apportant pas tant que ça
d'avantages -- bien souvent, gérer soi-même une assez grande quantité
de données est relativement facile en C++.

Avatar
Sylvain
Fabien LE LEZ wrote on 09/07/2006 17:26:
On Sun, 09 Jul 2006 16:34:52 +0200, James Kanze :

Si tu as besoin d'une base de données, tu as besoin d'une base de
données.



voui, voui, y'a aussi: si c'est de la bonne, c'est de la bonne.

Sauf cas spécifique, on n'a jamais *besoin* d'une base de données.


t'as décidé ça tout seul ? tu connais quoi des traitements de l'INSEE,
d'une banque, de la sécu ou même d'un commerce lambda ? d'ailleurs c'est
quoi tes références ?

On a un problème, et utiliser une BdD classique (MySQL par exemple)


"classique" est opposé à quoi ? pas relationnelle, ni object, vu l'exemple.

peut être une solution. Solution plus ou moins opportune selon les
circonstances.


http://www.google.com/search?&q=usenet%20troll ??

Dans un script PHP sur un serveur web, l'usage d'une BdD (souvent
MySQL) est courant.


t'as des stats ?

Dans un logiciel écrit en C++ et installé chez un grand nombre de
clients, c'est nettement moins conseillé, car ça complique
horriblement le déploiement,


tu peux détailler en quoi ? il faut "déployer" une prise réseau ? on est
en 2006 tu sais ?!

tout en n'apportant pas tant que ça d'avantages --
bien souvent, gérer soi-même une assez grande quantité
de données est relativement facile en C++.


ben voyons, renseigne toi avant d'affirmer de telles inepties.

Sylvain.


1 2 3 4 5