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
Arnaud Meurgues
H. wrote:

- quelle est la différence entre C et C++, "à part" que C++ permet la
programmation orientée objet ?


La réponse à cette question m'a semblé incomplète dans le fil, c'est
pourquoi je me permets d'intervenir.

C++ apporte une chose en plus au C que la programmation orientée objet,
c'est la programmation générique. Celle-ci permet que beaucoup de
contrôle de cohérence de type se fassent à la compilation et complète
assez bien la POO (ce n'est pas pour rien que Java comme C# on introduit
de la généricité).

- 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++) ?


C'est difficile à dire. On peut difficilement utiliser réellement C++
sans utiliser des objets et des classes génériques. Mais on peut déjà
faire pas mal de choses sans en créer soi-même.

Ainsi, pour écrire quelque chose sur la console, on utilise un flux qui
est une instance d'une classe générique. Mais on peut très bien choisir
de l'ignorer et l'utiliser « magiquement ».

- 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).


MS VC++ 2005 est un bon compilateur, je pense. g++ atteint aussi un
excellent niveau. Je ne connais pas dev-C++ mais il me semble qu'il
s'agit plus d'un ide que d'un compilateur (il s'appuie sur g++, il me
semble).

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) ?


Si vous ne recherchez pas la performance, ça doit pouvoir se faire sans
trop de difficulté.

--
Arnaud

Avatar
kanze
H. wrote:

Bon, je sais, c'est une question de débutant, mais bon... je n'arri ve
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 Ba sic,
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 simple s,
dont les réponses me permettront de choisir :

- quelle est la différence entre C et C++, "à part" que C++ perme t la
programmation orientée objet ?


Ils sont à beaucoup d'égards deux langages différents, bien
qu'il y a un sous-ensemble commun. L'orientation objet n'est
qu'une partie de ce que C++ offre, et sans doute pas la partie
la plus importante.

- 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++) ?


Tout à fait. On profitera quand même des types de valeur
supplémentaire, comme des chaînes de caractères ou des vrais
tableaux, par exemple. Sans parler d'un système
d'entrées/sorties qui n'exige pas la mémorisation d'un tas de
codes baroques et qui ne provoque pas un core dump au moindre
erreur.

- 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 Expre ss
(gratuits).


J'utilise VC++ 2005 sous Windows, mais je ne sais pas si ça
signifie grand chose. Je développe exclusivement sous Unix, et
puis je porte le code qui marche sous Windows. Avec l'aide d'un
environement CygWin ; je trouve que l'environement de
développement natif sous Windows n'est simplement pas assez
puissant.

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" ba se de
données avec des fichiers texte (sans se servir de SQL ou autres) ?


Tout à fait. À condition, évidemment, que l'utilisation se
réstreint à la persistence classique. S'il te faut l'équivalent
d'un select complexe avec un join sur plusieurs tableaux, autant
prendre une base de données dès le début.

- pour les interfaces graphiques, d'après ce que j'ai lu, on en rev ient
toujours à l'OS, et puis ce n'est pas le sujet du forum, etc.


Plus ou moins. Il existe aussi des solutions « portable », du
genre wxWidgets.

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) ?


Autant que je sache, les plus répandues sont wxWidgets et Qt.
Les deux gratuites pour les utilisations amateurs -- wxWidgets
pour toute utilisation.

--
James Kanze GABI Software
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
kanze
Sylvain wrote:
James Kanze wrote on 09/07/2006 23:28:
Sylvain wrote:
James Kanze wrote on 09/07/2006 18:51:

beaucoup d'applications Web utilise une base de données
non parce qu'elles ont besoin d'une base de données,
mais parce que le PHP sur leur site fournisseur n'offre
pas d'autre solution de persistence. (Il n'y a pas de
quoi dans la bibliothèque standard de C++ d'assurer une
persistence fiable non plus.


"persistence" de session ? ou illimitée ?


Persistente, ça veut dire que les données ne sont pas
perdues, quoique qui arrive.


merci je connais la définition, ce n'est pas ce que je t'ai
demandé.


C'est ce que j'ai compris. Il me semble entendu que « quoique
qui arrive » comprend la termination de la session.

Mais je crois qu'on pourrais s'accorder que l'utilisation d'un
mot simple, comme « persistance » est en effet réducteur, et
qu'on pourrait y entendre beaucoup de choses diverses. En m'en
servant, je me suis peut-être pas bien exprimé. Tout ce que je
voulais dire, c'est qu'en guise de mémoire longue terme,
certains herbergeurs (d'après ce que j'ai entendu -- je n'ai
pas fait d'étude approfondi dans la matière) ne permet d'écrire
sur disque qu'à traver mySQL. Du coup, quelqu'un qui gère,
disons une liste de membres, se sert automatiquement d'une base
de données, or que pour ce qu'il fait, il n'en a pas réelement
besoin, et qu'en C++, on l'écrira dans un fichier normal.

il n'y a que 3 points ci-dessus, faut-il les reprendre ?

- tu nous indiques que "bcp d'applications web" utilise une base comme
choix par défaut


Non, ou au moins, ce n'était pas mon intention. Les applications
Web en PHP qui gardent les informations sur une certaine durée,
au delà d'une « session » (qui n'existe pas en fait sous HTTP,
mais qu'on simule au moyen des cookies ou de la réécriture des
URL), se servent prèsque toujours (ou au moins, c'est mon
impression) d'une base de données. Y compris dans les cas
ultra-simple où on se contentera d'un fichier classique en C++.

a) on parle de la home page de Mme Michou ou de eBay et
Amazone ?? parce que le premier cas on s'en fout surement, les
autres utlisent des bases.


Dans le cas d'eBay ou d'Amazone, c'est sûrement justifié. Je ne
connaît pas Mme Michou, mais je crois qu'il y a quand même des
utilisations qui se situe entre ses pages d'accueil et eBay ou
Amazon.

b) PHP sait lire et écrire des fichiers, il est donc déjà
suffisant pour permettre la persistence de données,


Je ne connais pas le PHP. Mais de prèsque j'ai compris, beaucoup
de herbergeurs ne permettent l'écriture sur disques qu'à travers
mySQL. En tout cas, les gens avec qui j'ai parlé, et qui
s'intéressent à ce genre de chose, ne connaissent que mySQL
comme possibilité. (Mais c'est peut-être une lacune dans leur
formation.)

c) mais sauf pour Mme Michou s'il fait cela pour des volumes
importants de données, il bouffera toutes les ressources du
serveur pour un mauvais résultat.


Je ne suis pas sûr de ce que tu essaies à dire. Si c'est que
mySQL est particulièrement inefficace comme serveur SQL, au
moins pour les requêtes non-triviales, c'est une chose connues,
et je ne crois pas qu'Amazon tourne sous mySQL.

donc la question n'est pas que signifie persistence, mais à quelle
donnée persistante pensais-tu, la réponse menera sans peine à une
distinction entre variables de session (ou même ping-pong dans les
headers http) ou vers une base, enfin sauf pour Mme Michou ...


À vrai dire, je pensais à des choses comme des listes de
membres, ou une liste de personnes qui voulaient être mis au
courant des évolutions dans la sites. Des « tables SQL » avec
deux ou trois colonnes, et peut-être une centaines de lignes,
mais qui doivent persister d'une façon quasi-permanente. Un site
« typique » d'un lycéen branché, d'en juger d'après mes
enfants.

Mais c'est vrai que la persistence peut signifie beaucoup de
choses, et qu'on pourrait bien aussi ne pas vouloir perdre les
informations à l'intérieur d'une session, même si la machine
doit être re-bootée entre temps.

--
James Kanze GABI Software
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
kanze
Fabien LE LEZ wrote:
On Sun, 09 Jul 2006 23:36:26 +0200, James Kanze :

Et qu'est-ce qui se passe si le système crashe entre la
modification des données et leur écriture sur disque ?


Comme l'OP parle de "question de débutant", j'imagine qu'on ne
va pas lui confier l'écriture de logiciels "sensibles" avant
un petit bout de temps.


Entendu. C'est vrai que je suis un peu déformé par les
applications sur lesquelles j'ai travaillé. Quand tu as dit au
client qu'il peut utiliser l'IP xxx pendant 12 heures, tu n'as
vraiment pas envie de le réallouer dans ces 12 heures,
simplement parce que tu as perdu trace de l'allocation. Et quand
tu as accepté un ordre d'un client pour 100.000 actions, il faut
les livrer au prix du marché au moment qu'il a passé la
commande, même si le prix a augmenté dans les jours qui suivent.
(C'est bien plus complexe que ça, évidemment, mais tu vois un
peu l'idée.)

--
James Kanze GABI Software
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
kanze
Arnaud Meurgues wrote:
H. wrote:

- quelle est la différence entre C et C++, "à part" que C++ per met la
programmation orientée objet ?


La réponse à cette question m'a semblé incomplète dans le fil, c' est
pourquoi je me permets d'intervenir.

C++ apporte une chose en plus au C que la programmation
orientée objet, c'est la programmation générique. Celle-ci
permet que beaucoup de contrôle de cohérence de type se
fassent à la compilation et complète assez bien la POO (ce
n'est pas pour rien que Java comme C# on introduit de la
généricité).


Bien avant la programmation générique, bien avant la
programmation OO (et l'introduction des fonctions virtuelles),
le C++ apportait bien un meilleur encapsulation que le C. Quand
j'ai travaillé en C, je définissais des struct, et des ensembles
de fonctions pour travailler sur chaque struct. Et je me
croisais les doigts que personne ne faisait quoique ce soit avec
ces struct sauf au moyen de mes fonctions. Même aujourd'hui, je
dirais que l'apporte la plus importante de C++ par rapport à C,
c'est les fonctions membre et le contrôl d'accès.

Ensuite, évidemment, (et apparenté) c'est la possibilité de
définir des types utilisateur avec leur propre sémantique
d'initialisation et de copie. De pouvoir utiliser des
std::string (ou des diverses String pré-standard), à la place
des char[] (dont on n'était jamais sur qu'ils étaient assez
grand), par exemple.

Tout ça, on peut l'avoir sans jamais dériver, et sans jamais
avoir écrit un template.

--
James Kanze GABI Software
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
Laurent Deniau
kanze wrote:
Arnaud Meurgues wrote:

H. wrote:



- quelle est la différence entre C et C++, "à part" que C++ permet la
programmation orientée objet ?




La réponse à cette question m'a semblé incomplète dans le fil, c'est
pourquoi je me permets d'intervenir.



C++ apporte une chose en plus au C que la programmation
orientée objet, c'est la programmation générique. Celle-ci
permet que beaucoup de contrôle de cohérence de type se
fassent à la compilation et complète assez bien la POO (ce
n'est pas pour rien que Java comme C# on introduit de la
généricité).



Bien avant la programmation générique, bien avant la
programmation OO (et l'introduction des fonctions virtuelles),
le C++ apportait bien un meilleur encapsulation que le C. Quand
j'ai travaillé en C, je définissais des struct, et des ensembles
de fonctions pour travailler sur chaque struct. Et je me
croisais les doigts que personne ne faisait quoique ce soit avec
ces struct sauf au moyen de mes fonctions.


Parce que tu ne connaissais pas les ADT a cette epoque ;-)

a+, ld.



Avatar
Fabien LE LEZ
On 10 Jul 2006 04:00:02 -0700, "kanze" :

L'orientation objet n'est
qu'une partie de ce que C++ offre, et sans doute pas la partie
la plus importante.


Du moins, pour une définition de l'orientation objet.

je trouve que l'environement de
développement natif sous Windows n'est simplement pas assez
puissant.


Surtout, pas assez orienté "ligne de commande" pour tes besoins.

Autant que je sache, les plus répandues sont wxWidgets et Qt.


J'en viens même à me demander s'il reste d'autres bibliothèques GUI
pour Windows, utilisables en C++.

Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

Autant que je sache, les plus répandues sont wxWidgets et Qt.


J'en viens même à me demander s'il reste d'autres bibliothèques GUI
pour Windows, utilisables en C++.


Il y a GTK--, mais je ne sais pas si elle est utilisable, en general
ou pour Windows en particulier.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Fabien LE LEZ
On 10 Jul 2006 14:36:01 +0200, Jean-Marc Bourguet :

Il y a GTK--


Si je ne me trompe, c'est plus un "portage" d'une interface X sous
Windows (un peu comme Cygwin pour la ligne de commande) que d'une
vraie bibliothèque GUI capable d'afficher une interface "Windows"
normale.

Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

On 10 Jul 2006 14:36:01 +0200, Jean-Marc Bourguet :

Il y a GTK--


Si je ne me trompe, c'est plus un "portage" d'une interface X sous
Windows (un peu comme Cygwin pour la ligne de commande) que d'une
vraie bibliothèque GUI capable d'afficher une interface "Windows"
normale.


C'etait ce que j'avais compris pour GTK 1.x, mais il me semblait avoir
compris qu'un des objectifs de la version 2.x etait d'avoir une
apparence native. Maintenant, pour savoir si c'est reussi, il
faudrait que j'utilise Windows.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


1 2 3 4 5