OVH Cloud OVH Cloud

Newbies en C++ !

437 réponses
Avatar
Fuxy
Bonsoir à tous,


Voilà, il y a encore 1 mois, j'étais sous Windoz XP et je "bidouillais"
en VisualBasic 6.0

Depuis je suis passé sous Linux Suse 9.1 et je souhaiterais continuer à
"bidouiller", je ne cherche pas à développer des applications énormes,
mais juste des petits trucs pour m'amuser.

J'ai vu que sous Linux, le C++ avait l'air très répendu, j'ai donc
installé KDevelop qui permet de programmer en C++.

Et voilà, j'en suis à ce stade, j'ai acheté un bouquin sur le C++, j'en
suis à la page 10 ! et je me dis que ça a l'air un peu compliqué ...

Pouvez vous me conseiller ? est ce que le C++ est un bon choix pour moi
qui n'y connait rien ?

Merci pour votre aide.

A Bientot

--
Mail envoyé depuis Thunderbird
Sous Linux Suse 9.1 Pro

10 réponses

Avatar
kanze
"M. B." wrote in message
news:<cf9s91$b5l$...

Pourquoi est-ce une heresie de passer par le C pour apprendre C++ ?


Si le but est d'apprendre le C, et ensuite le C++, c'est une chose. Moi
aussi, j'ai bien appris le C avant le C++. Si le but, en revanche, est
d'apprendre le C++, le passage par le C est une perte de temps. Pour
programmer d'une manière efficace en C, il faut apprendre un tas de
choses qui ne servent pas en C++ (au moins qu'on travaille à un très bas
niveau, par exmple, on implémente la bibliothèque standard).

Un bon programmeur C adapte ses structures de donnees a son probleme.
Il construit des structures a l'aide de 'struct', ecrit des fonctions
pour les initialiser et les detruires, puis d'autres pour travailler
avec.


Un bon programmeur C utilise malloc et free pour allouer les tableaux
dont il ne connaît pas la taille d'avance, ou dont la taille varie de
façon dynamique -- en C++ moderne, on n'alloue pour ainsi dire jamais un
tableaux de façon dynamique. Un bon programmeur C utilise des macros
pour définir des fonctions et des structures qui ne varie que par le
type d'une partie des données -- en C++ moderne, on a des templates. Un
bon programmeur C connaît toutes les subtilités de printf et de scanf ;
un bon programmeur C++ ne s'en sert jamais.

[...]
Quelle difference entre un 'new' et un 'malloc()', entre un 'delete'
et un 'free()' ?


Le new/delete est typé. Le new/delete appelle automatiquement les
constructeurs et les destructeurs.

En général, si on se sert de new en C++, c'est que l'objet en question
est polymorphique -- on n'en connaît même pas le type d'avance. Tandis
que le neuf dixième des utilisations de malloc et de free en C, c'est
pour gérer des tableaux dont on ne connaît pas la taille d'avance. En
termes de l'utilisation typique, alors, le remplacement C++ de
malloc/free, c'est std::vector. Et quand on utiliserait new et delete en
C++, en C on utiliserait non seulement malloc et free, mais un ensemble
de struct dont un qui est commun à toutes les autres, avec un champ
d'identité de type, et beaucoup de switch et de cast.

[...]
Passer par le C n'est pas forcement une heresie ou un mauvais choix.


Passer par New York pour aller à Londres n'est pas forcement un mauvais
choix. Si on veut aller à New York d'abord, ou si on y est déjà.
Autrement, c'est un détour qui coûte cher.

--
James Kanze GABI Software http://www.gabi-soft.fr
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
drkm wrote in message
news:...
"M. B." writes:

Passer par le C n'est pas forcement une heresie ou un mauvais choix.


Choisir de passer par le C pour apprendre le C++ *est* une hérésie.


Une hérésie, non, parce qu'il ne s'agit pas d'une réligion. Choisir de
passer par le C quand le seul but est d'apprendre le C++ est une
stupidité manifeste, ou une manque de bon sens fondamental, mais ce
n'est pas une hérésie.

Choisir de commencer l'enseignement de C++ par des choses qui sont
communes avec le C peut se défendre. D'ailleurs, c'est difficile à les
écarter complètement -- le fait qu'un programme commence par l'appel
d'une fonction nommée main, qui renvoie un int et qui peut prendre deux
paramètres est commun à C et à C++, et c'est difficile de ne pas
l'enseigner dès le début. Mais si le but est d'apprendre le C++, en
l'enseigne bien parce que c'est une partie essentielle de C++, et non
parce qu'on a choise de commencer par le C ; si le seul but est
d'apprendre le C++, ce n'est que du bon sens que l'apprentissage de
malloc et de free (par exemple) n'est qu'une perte de temps.

--
James Kanze GABI Software http://www.gabi-soft.fr
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
Laurent Deniau wrote in message
news:<cfaheh$o1j$...
Fabien LE LEZ wrote:
On Tue, 10 Aug 2004 14:35:54 +0200, Laurent Deniau
:

En quoi le C++ propose un typage plus fort que le C?


Est-ce que C gère correctement "const" ?


Est-ce que C++ gere correctement "const"?


Qu'est-ce que ça veut dire, « gerer correctement "const" » ? Moi,
j'aurais cru que la gestion de const, c'est plutôt une question de
programmation, et non du langage.

En tout cas, la signification de const est à peu près identique en C et
en C++, au moins pour les parties communes des langages. En revanche,
les traditions veulent que les programmeurs C ne gèrent pas le const,
tandis que les programmeurs C++ si. (En fait, c'est plutôt faire une
vertu d'une nécessité. Il y a un ou deux choses dans la partie purement
C++ qui fait que tu es prèsqu'obligé de le gerer en C++.)

--
James Kanze GABI Software http://www.gabi-soft.fr
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 11 Aug 2004 01:25:35 -0700, :

le nom (il faut éviter le Basic à tout prix
si on veut apprendre à programmer), et la manque de portabilité (je
travaille surtout sur des machines Unix).


Y'a longtemps, j'avais installé une RedHat (histoire de voir à quoi ça
ressemble), et j'ai cru y voir un package "Basic".

si le but n'est que des petits
bidouillages, et qu'on ne connaît pas déjà bien le C++, le C++ n'est pas
un bon choix.


Et même alors que je connais bien le C++, ma préférence va plutôt à
PHP pour les petits bidouillages (d'autres préféreront Perl) -- sauf
si j'ai une bonne raison de choisir C++.


--
;-)

Avatar
kanze
Laurent Deniau wrote in message
news:<cfai51$po6$...
Fabien LE LEZ wrote:
On Tue, 10 Aug 2004 14:54:10 +0200, Fabien LE LEZ
:

Est-ce que C gère correctement "const" ?


Note : il s'agit bien d'une question. J'ai vraiment de grosses
lacunes en C (ou, pour prendre le problème à l'envers, j'ai quelques
vagues connaissances en C ;-) ).


Pour repondre, il faudrait d'abord definir ce que l'on attend de const
dans le language et que signifie gerer "correctement" const. Hormis
ces deux considerations, const en C est plus simple et plus logique
(pas de cas particulier de sa semantique), mais ca ne repond en rien a
la question :-).


Comme j'ai déjà dit, les deux langages sont prèsqu'identique dans leur
traitement de const, dans les parties communes. (En fait, de tête, je
crois qu'ils y sont rigueureusement identiques. Et que c'était en tout
cas l'intention du comité de normalisation C++ et avant de Stroustrup
qu'ils le soient.) En revanche :

- Le fait qu'en C++ tu ne peux pas initialiser une référence à un
non-const avec un temporaire exige prèsque que le programmeur C++
prenne en compte les questions de const.

- Le fait qu'en C tu ne peux pas surcharger une fonction (comme par
exemple strchr) pour que soit elle prend et elle renvoie un pointeur
à const, soit elle prend et elle renvoie un pointeur à non const,
exige prèsque que le programmeur C prenne des libertés avec const.

--
James Kanze GABI Software http://www.gabi-soft.fr
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 in message
news:...
On Tue, 10 Aug 2004 15:55:07 +0200, "Arnaud Debaene"
:

peut plus ou moins "émuler" tout cela en C (quoique les templates
???)


A priori, on peut faire pas mal de choses avec des macros bien
tordues.


Et même avec des macros bien propres:-). Qui ne s'est pas servi de
<generic.h>, dans le temps ? Et il n'y avait rien dans <generic.h> qui
n'aurait pas marché en C.

--
James Kanze GABI Software http://www.gabi-soft.fr
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
Jean-Marc Bourguet
writes:

Laurent Deniau wrote in message
news:<cfai51$po6$...
Fabien LE LEZ wrote:
On Tue, 10 Aug 2004 14:54:10 +0200, Fabien LE LEZ
:

Est-ce que C gère correctement "const" ?


Note : il s'agit bien d'une question. J'ai vraiment de grosses
lacunes en C (ou, pour prendre le problème à l'envers, j'ai quelques
vagues connaissances en C ;-) ).


Pour repondre, il faudrait d'abord definir ce que l'on attend de const
dans le language et que signifie gerer "correctement" const. Hormis
ces deux considerations, const en C est plus simple et plus logique
(pas de cas particulier de sa semantique), mais ca ne repond en rien a
la question :-).


Comme j'ai déjà dit, les deux langages sont prèsqu'identique dans leur
traitement de const, dans les parties communes. (En fait, de tête, je
crois qu'ils y sont rigueureusement identiques. Et que c'était en tout
cas l'intention du comité de normalisation C++ et avant de Stroustrup
qu'ils le soient.) En revanche :


De memoire, les regles pour const dans des pointeurs vers pointeurs
sont moins strictes (mais aussi sures) en C++ qu'en C.

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
kanze
Fabien LE LEZ wrote in message
news:...
On Tue, 10 Aug 2004 09:58:55 +0200, Richard Delorme
:

Peut-on envisager sérieusement de programmer en C++ sans _utiliser_
d'objets ?


Peut-on envisager sérieusement de programmer en C sans _utiliser_ des
objets ? Dans tous les programmes C que j'ai écrit, j'ai défini des
struct et un ensemble de fonctions qui manipulaient ces struct, avec
l'interdiction d'y accéder autrement que par ces fonctions. (Souvent,
même, l'interdiction était enforcée, en ce que je ne mettais qu'une
declaration de la struct, mais non sa définition, dans l'en-tête
publique.)

Selon la plupart des auteurs, utiliser des objets n'est pas faire de la
programmation orientée objet. Booch, par exemple, ne consindère un
programme « orienté objet » que s'il y a polymorphisme, et un langage
« orienté objet » que s'il supporte le polymorphisme.

Or, AMHA, le polymorphisme et la programmation générique sont des
complexités en plus. Je m'en sers quand ils rendent mon programme plus
simple par ailleurs, mais je ne m'en sers pas systèmatiquement,
simplement pour faire de l'orienté objet ou pour faire de la
programmation générique. Ce qui veut dire qu'un programme C++ sans
héritage et sans template est tout à fait envisageable. (Tandis qu'un
programme C++ sans classe, non, de même qu'un programme C sans un
struct. En fait, à ce niveau, la grande différence, c'est qu'en C, je me
crois les doigts que l'utilisateur respecte les commentaires, et
n'utilise pas les champs dans la struct directement, tandis qu'en C++,
je les déclare privés, et il ne peut pas les utiliser sans modifier
l'en-tête.)

--
James Kanze GABI Software http://www.gabi-soft.fr
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
dug8C
Fuxy wrote in message news:<cf60rq$n9$...
Bonsoir à tous,


Voilà, il y a encore 1 mois, j'étais sous Windoz XP et je "bidouillais"
en VisualBasic 6.0

Depuis je suis passé sous Linux Suse 9.1 et je souhaiterais continuer à
"bidouiller", je ne cherche pas à développer des applications énormes,
mais juste des petits trucs pour m'amuser.

bonjour,

Si je peux t'éviter des galères je peux peut-être te parler de mon
expérience personnelle:
Je suis autodidacte et c'est le côté ludique qui m'a pousse vers
l'apprentissage du c++.
Je me suis aperçu que pour créer des jeux video il fallait passer par
le C ou le C++.
J'avais quelques connaissance en basic, j'avais créé des petits
programmes et j'ai donc acheté un livre de poche sur le C "juste pour
voir".
Alors comme je n'y connaissais rien, je me suis dit C++ ça doit être
mieux (en rapport avec "++").

En cherchant un livre sur le C++ en FRANCAIS et après quelques achats
peu,voire totalement , inutiles (entre autre l'achat d' un gros livre
montrant
comment afficher des dessins sur l'écran avec VC++ qui ne sert même
pas pour caler l'armoire car il est trop gros ), j'ai avancé un peu
avec "Visual C++ 6.0" et le compilateur inclu et là j'ai pu créer
quelque chose en suivant les exemples du livre.
Mais il y avait encore trop de choses dans le code qui me déplaisait
car je ne les comprenaient qu'à moitié, et surtout pas facile de créer
un jeu 3D.

Je suis donc retourné au magasin et apres des recherches sur internet
j'ai acquis le livre de B.Stroutoup.
Alors là j'étais content plus je lisais plus, je trouvais ça
interessant mais au bout de quelques temps j'avais toujours autant de
mal à y voir clair.
C'est depuis peu que j'arrive à comprendre comment ça fonctionne,
grace à ce forum entre autre quand j'ai vu que d'autres personnes
avaient aussi du mal avec Stroutoup :)

Au détour de mes recherches j'ai trouvé "Thinking in C++" en anglais
malheureusement mais que j'ai téléchargé par dépit
(en me disant "c'est gratuit ça doit pas valoir grand chose, je vais
voir quand même") et là j'ai compris pas mal de choses.
Je regrette fortement de ne pas avoir trouvé l'équivalent en français
car j'ai un peu de mal avec l'anglais. (J'ai commencé à le traduire
mais je doute de finir un jour)
J'ai bien apprécié le livre de Scott Meyers "le C++ efficace" traduit
en français.

Depuis je me suis mis à DevC++, et j'ai réussi à créé un petit
casse-brique en OpenGL sous windows, grace à quelques tutoriels (
http://nehe.gamedev.net/ )
Je suis conscient de n'être qu'au début de l'apprentissage, mais si
j'avais eu le bon livre dès le départ j'aurais évité pas mal de tracas
:)
Le plus dur est de trouver le bon livre AVEC exercices corrigés ET
commentés.
Note que je suis toujours à la recherche d'un livre sur le C++ en
français! :)

Avatar
kanze
"M. B." wrote in message
news:<cfag7h$nu4$...

[...]
Les fonctionalites et la puissance du C++ ont engendre la STL.


Et vice versa. C'est parce que les auteurs de la STL avaient besoin des
membres templatés qu'ils ont été ajouté au langage. (Je simplifie
beaucoup, évidemment. Mais le langage a bien évolué de façon à permettre
l'implémentation de ce dont la bibliothèque avait besoin.)

La STL est une consequence du langage.


Le langage C++, aujourd'hui, est une conséquence de la bibliothèque
standard.

L'inverse est faux.


Non.

Pretendre que tout developpement sans STL, comme il est d'usage sur ce
forum, est a priori mauvais est une erreur.


Personne ne le prétend.

Prétendre qu'il faut réimplémenter une partie normalisée du langage,
sous prétexte qu'il est possible, est une erreur. Si on n'a pas besoin
de std::string (parce qu'il s'agit d'un programme embarqué qui ne traite
pas de texte, nulle part, par exemple), on ne s'en sert. Si on a besoin
de std::string, en revanche, ça serait une grosse erreur de ne pas s'en
servir.

Ce n'est qu'une bibliotheque, parmi d'autres.


Ce n'est qu'une partie du langage spécifiée par la norme, parmi
d'autres. La bibliothèque standard fait aussi bien partie de C++ que les
exceptions et les templates.

On inverse cause et consequence, en passant a cote de l'essentiel d'un
langage dont on n'a pas compris le fondement.


Voyons les gens qui commence l'enseignement par std::vector et
std::string. Je ne crois vraiement pas que Andy Koenig (pour ne citer
qu'un exemple) n'a pas compris le fondement du langage. Vue les
déclarations ci-dessus, je me démande, en revanche, si un certain M. B.
les a bien compris.

Relire le Stroustrup me parait s'imposer.


Pourquoi ? Il dit quelque part que pour apprendre le C++, il faut, ou il
vaut mieux, commencer par le C ? Si c'est le cas, il faut crois que la
leçon passe mal -- Andy Koenig ne paraît pas l'avoir appris, malgré des
années d'une collaboration étroite avec Stroustrup. D'après ses postings
ici, j'ai l'impression que Gabi ne l'a pas appris non plus, bien qu'il
prépare ces cours sous la direction directe de Stroustrup (je crois --
en tout cas, ils enseignent dans le même département à la même
université).

--
James Kanze GABI Software http://www.gabi-soft.fr
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