OVH Cloud OVH Cloud

Ou apprendre le C++???

57 réponses
Avatar
nemrod2100
Bonjour Je desire apprendre le C++ je connais le C et Java .
Es ce que quelqu'un pourrait il m'indiquer par exemple un bon ouvrage a
acheter ou un bon site web avec Tutoriel.
En vous remerciant a l'avance
Cordialement

10 réponses

2 3 4 5 6
Avatar
Alain Naigeon
"drkm" a écrit dans le message news:

"Alain Naigeon" writes:


"drkm" a écrit dans le message news:


Mais pour revenir à la discussion : si tu as besoin de std::vector,
new t'est de peu d'utilité.


Alors là, mon oeil, utiliser un container qui garde des
pointeurs


Quel est le rapport ?

sans avoir jamais utilisé new, c'est bizare.


Évidemment.


Donc aucun objet créé sur le tas ?


La preuve, il y eu plusieurs débutants ici qui se perdaient
en confondant l'allocation et l'initialisation d'un pointeur sur
un int avec alloc et init de cet int lui-même.


La preuve ? De quoi ?


Le preuve que truquer en contournant une difficulté te
retombe sur le coin de la figure tôt ou tard. Mieux vaut
expliquer une bonne fois, et comprendre ce qu'on fait
par la suite.


C'est avec
les pointeurs qu'on se coltine ce problème, c'est en se
trompant qu'on apprend, et je me vois mal utiliser une
classe qui garde des pointeurs sans savoir ce qu'est un pointeur.


Si par « qui garde des pointeurs », tu veux dire qui en utilise,
comme std::vector pour stocker ses éléments, alors je ne suis pas du
tout d'accord (je ne te suis d'ailleurs pas du tout).


Simplement, comme je dis par ailleurs à Fabien, je me vois mal comprendre
comment "marche" une référence sans savoir ce qu'est un pointeur.

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France



Avatar
Loïc Joly
Alain Naigeon wrote:

La preuve, il y eu plusieurs débutants ici qui se perdaient
en confondant l'allocation et l'initialisation d'un pointeur sur
un int avec alloc et init de cet int lui-même.


La preuve ? De quoi ?



Le preuve que truquer en contournant une difficulté te
retombe sur le coin de la figure tôt ou tard. Mieux vaut
expliquer une bonne fois, et comprendre ce qu'on fait
par la suite.


Il faut bien commencer par quelquechose, et essayer de le finir plus ou
moins avant que de passer à la suite. Il est clair qu'il faudra
apprendre new, delete, vector, les exceptions, les pointeurs, les
références... Mais pas tout d'un coup !

La question n'est alors pas "qu'est-ce qu'on ne montre pas" mais "dans
quel ordre on montre". Et à cette question, certains (comme moi)
prétendent que de montrer comment utiliser vector demande moins de
prérequis que de montrer comment utiliser new[].

Comme de plus, c'est plus souvent la solution à envisager, pourquoi ne
pas commencer par ça ? (en fait, je commencerais plutôt par string, le
concept de tableau n'étant pas forcément si simple que ça).

Maintenant, comprendre comment vector peut marcher est un chapitre qui
viendra plus tard, en illustration des classe templates, par exemple, ou
en illustration du placement new.

Si tu n'y crois pas, je te conseille de lire accelerated C++. C'est le
livre d'apprentissage le plus clair que j'ai lu jusqu'ici.



Simplement, comme je dis par ailleurs à Fabien, je me vois mal comprendre
comment "marche" une référence sans savoir ce qu'est un pointeur.


Comment font les programmeurs en visual basic ?

--
Loïc



Avatar
Loïc Joly
Alain Naigeon wrote:

"Fabien LE LEZ" a écrit dans le message news:


On Mon, 7 Jun 2004 23:05:52 +0200, "Alain Naigeon"
wrote:


Même réponse que d'habitude : il ne s'agit pas d'en masquer
l'existence. Le problème est qu'il s'agit d'une notion complexe,


Mais pas tant que ça, voyons !


Pour un débutant complet (i.e. quelqu'un qui ne connaît pas encore
vector<> et string), si.



Oh mais c'est énorme !! Des générations entières ont "digéré"
les pointeurs avnt l'existence de vector et string ;


Est-ce pour ça que c'était bien ? Des générations entières ont "digéré"
la manivelle pour démarrer une voiture. Est-ce une raison pour commencer
par ça quand on passe le permis, sous pretexte que sous le capot, le
starter automatique fait toujours la même chose ?

D'autre part, la distinction entre le passage d'argument par valeur
ou par adresse existe depuis la nuit des temps, et je ne vois pas
comment expliquer cela (ou une référence) sans donner la notion
de pointeur.


Je ne vois pas comment l'expliquer avec un pointeur.

Ou alors par effet papillon, téléportation, magie noire,


Ton mode de pensée (issu du C?) te dis que le passage par valeur est le
seul possible, et que pour passer par référence, il faut la présence
plus ou moins cachée de pointeurs.

Ce n'est pas le cas.

En Java, le passage se fait par référence
En VB, le passage se fait selon que l'utilisateur indique ByVal ou ByRef
En pascal, le passage se fait par valeur par défaut, mais var autorise
le passage par référence
En IDL, le passage se fait par valeur (mode in) ou par référence (mode
inout) ou encore par autre chose (mode out)

Dans tous ces langages (qui sont les premiers qui me sont venus en tête,
et n'ont pas été choisis pour leur côté pathologique), la notion de
passage par référence existe, et ne fait nullement appel à la notion de
pointeur, et je n'ai jamais vu un cours d'introduction à l'un de ces
langages l'expliquer en disant "c'est un peu comme si c'était un pointeur".

inégalité de Bell ?? Bon, je sais, on est dans la civilisation
presse-bouton,
alors voilà, c'est magique, et on t'expliquera plus tard... Là je me rebiffe
!


Je ne vois pas plus de magie dans le passage par référence que dans
celui par valeur. Tu te rend compte, ta fonction, tu lui passe une
variable bien gentille, et pour une raison mystérieuse, elle décide de
ne pas l'utiliser mais de la copier ailleur et d'utiliser la copie ! Si
ça c'est pas de la magie maléfique qui a influencé les concepteurs du
langage !

--
Loïc




Avatar
Fabien LE LEZ
On Tue, 8 Jun 2004 22:43:53 +0200, "Alain Naigeon"
wrote:

Oh mais c'est énorme !! Des générations entières ont "digéré"
les pointeurs avnt l'existence de vector et string ;


Des générations entières ont passé leur vie à marcher, parce que la
voiture n'existait pas encore.
Moi qui ai l'habitude de passer pour un vieux con, je vais peut-être
passer pour un jeune con, mais je rappelle que nous sommes en 2004.

exercices figurant en bonne place, c'est à dire pas du tout
en fin d'ouvrage, chez le Maître et quelques centimaîtres.


Si tu parles du bouquin de Bjarne Stroustrup, je te répondrai qu'il ne
s'agit pas d'un bon bouquin d'apprentissage. C'est un livre de
référence. Je le trouve même passablement aride.

--
;-)
FLL, Epagneul Breton

Avatar
Fabien LE LEZ
On Tue, 8 Jun 2004 22:48:31 +0200, "Alain Naigeon"
wrote:

Simplement, comme je dis par ailleurs à Fabien, je me vois mal comprendre
comment "marche" une référence sans savoir ce qu'est un pointeur.


S'il s'agit d'utiliser std::vector<> de façon très basique (toujours
dans le cadre d'un Chapitre 1), il n'est même pas besoin de parler de
référence.

--
;-)
FLL, Epagneul Breton

Avatar
Alain Naigeon
"Loïc Joly" a écrit dans le message news:
ca5bgl$fnk$

Je ne vois pas plus de magie dans le passage par référence que dans
celui par valeur. Tu te rend compte, ta fonction, tu lui passe une
variable bien gentille, et pour une raison mystérieuse, elle décide de
ne pas l'utiliser mais de la copier ailleur et d'utiliser la copie !


La question n'est pas de syntaxe ; c'est une convention comme une
autre que "pas par référence" veut dire "par valeur", ce n'est pas le
point en cause de savoir pourquoi la fonction "décide de copier".
Ce qui est en cause, c'est que c'est facile de comprendre que la
modification d'une copie n'affecte pas l'original, et que, par contre,
il n'est pas évident d'expliquer comment fonctionne une référence
sans parler d'adresse. Le pointeur, c'est juste l'émergence de la notion
d'adresse dans le langage (s'il le permet). Une indirection, une variable
qui contient une adresse, c'est tout de même fondamental !
Même un bête "programmeur" Excel est obligé de se coltiner ça, alors,
si ça n'est pas à la portée d'un débutant C++ ..., que dire ?

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France

Avatar
Alain Naigeon
"Loïc Joly" a écrit dans le message news:
ca5a9k$msh$

Il faut bien commencer par quelquechose, et essayer de le finir plus ou
moins avant que de passer à la suite. Il est clair qu'il faudra
apprendre new, delete, vector, les exceptions, les pointeurs, les
références... Mais pas tout d'un coup !

La question n'est alors pas "qu'est-ce qu'on ne montre pas" mais "dans
quel ordre on montre". Et à cette question, certains (comme moi)
prétendent que de montrer comment utiliser vector demande moins de
prérequis que de montrer comment utiliser new[].

Comme de plus, c'est plus souvent la solution à envisager, pourquoi ne
pas commencer par ça ? (en fait, je commencerais plutôt par string, le
concept de tableau n'étant pas forcément si simple que ça).

Maintenant, comprendre comment vector peut marcher est un chapitre qui
viendra plus tard, en illustration des classe templates, par exemple, ou
en illustration du placement new.

Si tu n'y crois pas, je te conseille de lire accelerated C++. C'est le
livre d'apprentissage le plus clair que j'ai lu jusqu'ici.


Dis comme ça, c'est déjà plus attrayant... mais pour moi c'est trop tard :-)
(trop tard pour oublier les pointeurs, pas pour lire ce bouquin que je n'ai
pas)

Simplement, comme je dis par ailleurs à Fabien, je me vois mal
comprendre


comment "marche" une référence sans savoir ce qu'est un pointeur.


Comment font les programmeurs en visual basic ?


Un programmeur confirmé VB, lui, a choisi délibérément de ne pas
comprendre ce qu'il fait :-) J'aurais dû dire "adresse", non pas pointeur.
(ma parole, vous recommencez subrepticement à professer que ce qui
n'existe pas syntaxiquement dans le langage n'est pas digne d'intérêt)

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France


Avatar
Alain Naigeon
"Fabien LE LEZ" a écrit dans le message news:

Si tu parles du bouquin de Bjarne Stroustrup, je te répondrai qu'il ne
s'agit pas d'un bon bouquin d'apprentissage. C'est un livre de
référence. Je le trouve même passablement aride.


Honnêtement, je suis assez d'accord. Mettons qu'un diplomate
le qualifierait de "stimulant" ;-)
--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France

Avatar
Alain Naigeon
"Fabien LE LEZ" a écrit dans le message news:

On Tue, 8 Jun 2004 22:48:31 +0200, "Alain Naigeon"
wrote:

Simplement, comme je dis par ailleurs à Fabien, je me vois mal comprendre
comment "marche" une référence sans savoir ce qu'est un pointeur.


S'il s'agit d'utiliser std::vector<> de façon très basique (toujours
dans le cadre d'un Chapitre 1), il n'est même pas besoin de parler de
référence.


Quoique... dès qu'une de tes fonctions travaille sur un container
reçu en argument, ça commence à sentir le roussi...

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France


Avatar
drkm
"Alain Naigeon" writes:

"drkm" a écrit dans le message news:


"Alain Naigeon" writes:

"drkm" a écrit dans le message news:


Mais pour revenir à la discussion : si tu as besoin de std::vector,
new t'est de peu d'utilité.


Alors là, mon oeil, utiliser un container qui garde des
pointeurs


Quel est le rapport ?

sans avoir jamais utilisé new, c'est bizare.


Évidemment.


Donc aucun objet créé sur le tas ?


?

La preuve, il y eu plusieurs débutants ici qui se perdaient
en confondant l'allocation et l'initialisation d'un pointeur sur
un int avec alloc et init de cet int lui-même.


La preuve ? De quoi ?


Le preuve que truquer en contournant une difficulté te
retombe sur le coin de la figure tôt ou tard. Mieux vaut
expliquer une bonne fois, et comprendre ce qu'on fait
par la suite.


Mais quel est le rapport entre l'utilisation de std::vector et celle
de l'allocation dynamique ? Je ne vois pas ce que std::vector
« truque ». Cela t'évite de gérer toi-même l'allocation dynamique
inhérente à une collection de longueur variable.

C'est avec
les pointeurs qu'on se coltine ce problème, c'est en se
trompant qu'on apprend, et je me vois mal utiliser une
classe qui garde des pointeurs sans savoir ce qu'est un pointeur.


Si par « qui garde des pointeurs », tu veux dire qui en utilise,
comme std::vector pour stocker ses éléments, alors je ne suis pas du
tout d'accord (je ne te suis d'ailleurs pas du tout).


Simplement, comme je dis par ailleurs à Fabien, je me vois mal comprendre
comment "marche" une référence sans savoir ce qu'est un pointeur.


Tout d'abord, il y a le fait de savoir ce qu'est un pointeur, et
l'utiliser de manière fiable. Tout programmeur C++ sais ce qu'est un
pointeur. Pour ce qui est de l'employer de manière fiable ...

Puis je trouve les références plus simples à comprendre que les
pointeurs. Pas d'allocation ou de désallocation dont tenir compte.

Mais je répète que la phrase que tu désapprouvais était « Si tu as
besoin de std::vector, new t'est de peu d'utilité. » Tu me dis que
s'il faut utiliser des pointeurs, alors il faut bien en connaitre les
mécanismes. D'accord. Mais quel rapport ?

--drkm




2 3 4 5 6