OVH Cloud OVH Cloud

Apprendre le C++

69 réponses
Avatar
leo.hal
Bonjour,

J'ai une petite exp=E9rience en Java et en C et je voudrais me mettre au
c++.

Auriez-vous des sites (a part developpez.com ) ou des livres en
fran=E7ais pour apprendre ce langage.

Merci.

10 réponses

Avatar
Marc Boyer
Le 18-01-2007, Jean-Marc Bourguet a écrit :
Marc Boyer writes:

Le 18-01-2007, Laurent Deniau a écrit :
Si C++ est 'object-based', est-ce au sens 1) ou 2). Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template


plutot l'overloading non ?

virtual -> redefinition dynamique (dynamic binding)
overloading -> redifinition statique (subtyping)


Merde, un pb de vocabulaire français. En fait, je me plie au
vocabulaire qu'on utilise en TD, et comme on fait Java, on ne peut
rédéfinir que les fonctions virtuelles.

Bon, si vous avez deux minutes, rappelez moi comment on nomme
ces 3 cas en anglais et français.

class A {
void f(int i);
void f(float f); // en: overloading | fr: surcharge
virtual void g(int i);
}

class A : public B {
void f(float f); // en: ?? | fr: redefinition ?
void g(int i); // en: ?? | fr: redefinition ?
}


override. En fr je crois que Gaby a dit une fois que supplanter avait ete
choisi (mais pose le probleme qu'il n'y a pas de nom). On trouve aussi
surdefinir, substituer.


OK, et donc, on doit préciser 'virtual overriding' ou 'non virtual
overriding' pour montrer la nuance entre les deux, ou 'dynamic'
overriding'.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)




Avatar
Laurent Deniau
Jean-Marc Bourguet wrote:
Laurent Deniau writes:

plutot l'overloading non ?

virtual -> redefinition dynamique (dynamic binding)
overloading -> redifinition statique (subtyping)


Je lierai le subtyping avec le polymorphisme d'inclusion plutot qu'avec
l'overloading.


Du point de vue des types (et des classes) je suis d'accord. Mais du
point de vue pratique, ce n'est pas le subtyping qui nous interesse,
mais la resolution statique des surchages (les fonctions membres etant
un cas particulier), c'est a dire les regles de resolution ennoncees
dans l'overloading (13.3). Parce que sans ca, rien n'est possible.

En ce qui concerne les templates, je pense que c'est un concept
orthogonal a l'overloading qui ajoute une deuxieme dimension au systeme
de type permettant de "configurer" la resolution de l'overloading
(14.8.2) avec les specialisations pour obtenir des comportements
specifiques.

Le tout donne un systeme effectivement tres flexible a la compilation
(13.3 + 14.8.3) mais qui ne fait pas bon menage avec le dynamic binding
(virtual). S'il faisait bon menage, les multimethodes seraient a portee
de mains car ce n'est rien d'autre que de la surcharge dynamique et C++
deviendrait du meme coup le plus flexible des languages (enfin presque,
parce que pour etre utilisable il lui faudrait la possibilite de
preciser dans les specialisations si un argument est covariant ou
contravariant comme en Scala).

Ceci dit, il faut deja un bon niveau d'expertise en C++ (et bien
connaitre son compilateur) pour melanger les trois concepts massivement
(comprendre != cas d'ecole).

a+, ld.


Avatar
Serge Paccalin
Le 18.01.2007 13:44, Jean-Marc Bourguet a ecrit:

override. En fr je crois que Gaby a dit une fois que supplanter avait ete
choisi (mais pose le probleme qu'il n'y a pas de nom).


http://atilf.atilf.fr/dendien/scripts/fast.exe?mot=supplantation

--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Pour bien répondre avec Google, ne pas cliquer
-'(__) « Répondre », mais « Afficher les options »,
_/___(_) puis cliquer « Répondre » (parmi les options).

Avatar
Laurent Deniau
Marc Boyer wrote:
Marc Boyer writes:

Si C++ est 'object-based', est-ce au sens 1) ou 2). Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template
plutot l'overloading non ?


virtual -> redefinition dynamique (dynamic binding)
overloading -> redifinition statique (subtyping)
Merde, un pb de vocabulaire français. En fait, je me plie au

vocabulaire qu'on utilise en TD, et comme on fait Java, on ne peut
rédéfinir que les fonctions virtuelles.

Bon, si vous avez deux minutes, rappelez moi comment on nomme
ces 3 cas en anglais et français.

class A {
void f(int i);
void f(float f); // en: overloading | fr: surcharge
virtual void g(int i);
}

class A : public B {
void f(float f); // en: ?? | fr: redefinition ?
void g(int i); // en: ?? | fr: redefinition ?
}
override. En fr je crois que Gaby a dit une fois que supplanter avait ete

choisi (mais pose le probleme qu'il n'y a pas de nom). On trouve aussi
surdefinir, substituer.


OK, et donc, on doit préciser 'virtual overriding' ou 'non virtual


perso, je comprends:

[type -> terme -> traduction (support)]
static -> overloading -> surcharge (decoration de nom)
dynamic (virtual) -> overriding -> redefinition (table de pointeur)
parametric (template) -> specialisation -> idem (generation de code)

Pour les subtilites de salon, ce sera seulement autour d'une tasse de
the ;-)

a+, ld.





Avatar
Fabien LE LEZ
On Thu, 18 Jan 2007 11:32:08 +0100, Azuriel :

Mais je crois qu'on s'éloigne du sujet.


À l'intérieur d'un troll, tout est permis.

Avatar
Nelio
Si vous voulez briller en société, vous pouvez glisser que C++ est un
langage multi-paradigme.


MDR, j'essaierai tiens :p

Avatar
Mathias Gaunard

Une définition un peu courte qui nous dit:

In computer science, the term object-based has two different,
incompatible senses:

1. A somehow limited version of object-oriented programming where one
or more of the following restrictions applies:
* there is no implicit inheritance
* there is no polymorphism
* only a very reduced subset of the available values are
objects (typically the GUI components)
2. Prototype-based systems (i.e., those based on "prototype" objects
which are not instances of any class)

Si C++ est 'object-based', est-ce au sens 1) ou 2).


En 1), bien évidemment.

Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template)


Tu confonds concepts et fonctionnalités.
Cette définition explique le concept de la programmation basée objet,
qui est un sous-ensemble du concept de programmation orientée objet
(appelée "par objets" en français par certains).

Ce n'est pas parce que C++ permet de faire de la programmation orientée
objet que le concept basé objet n'est pas plus important dans le langage.

C'est pourtant explicite : la virtualité, et donc le polymorphisme
d'héritage, ne sont pas activés par défaut.
Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à
tort et à travers et de préférer les approches à base de templates.


Donc, en quoi C++ est-il 'basée objet' ?


Grouper des choses dans des objets, définir constructeurs et
destructeurs selon l'idiome RAII, le C++ c'est avant tout cela.
Et on voit que la programmation basée objet en est un élément clé.

Avatar
Mathias Gaunard

Si vous voulez briller en société, vous pouvez glisser que C++ est un
langage multi-paradigme.


Merci, j'essaierai de caser ça au déjeuner de la prochaine réunion du
comité, en avril à Oxford.

Avatar
Sylvain
Mathias Gaunard wrote on 19/01/2007 01:43:

C'est pourtant explicite : la virtualité, et donc le polymorphisme
d'héritage, ne sont pas activés par défaut.


soit.

Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à
tort et à travers et de préférer les approches à base de templates.


pardon ? c'est recommandé où cette censure ?

Sylvain.

Avatar
Marc Boyer
Le 19-01-2007, Mathias Gaunard a écrit :
In computer science, the term object-based has two different,
incompatible senses:
1. A somehow limited version of object-oriented programming where one
or more of the following restrictions applies:
* there is no implicit inheritance
* there is no polymorphism
* only a very reduced subset of the available values are
objects (typically the GUI components)
2. Prototype-based systems (i.e., those based on "prototype" objects
which are not instances of any class)

Si C++ est 'object-based', est-ce au sens 1) ou 2).


En 1), bien évidemment.


Bien sur...

Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template)


Tu confonds concepts et fonctionnalités.


Heuh... Les infos que tu as indique ne s'embarassent pas non plus
de cette distinction. On pourrait aussi distinguer fonctionnalite et
support. Car bon, avec des pointeurs de fonction, on fait de la POO
en C. Donc il y a du polymorphisme en C ?

Cette définition explique le concept de la programmation basée objet,
qui est un sous-ensemble du concept de programmation orientée objet
(appelée "par objets" en français par certains).


OK

Ce n'est pas parce que C++ permet de faire de la programmation orientée
objet que le concept basé objet n'est pas plus important dans le langage.


OK, mais ca ne montre pas l'inverse non plus.
C permet de faire de la POO et ca n'implique pas grand chose non plus
sur l'important du concept 'base objet' dans le langage.

C'est pourtant explicite : la virtualité, et donc le polymorphisme
d'héritage, ne sont pas activés par défaut.


C'est ca l'argument ? D'une part, la def citee ne precise pas
quel type de polymorphisme, et ensuite, dire qu'il faut ajouter
un mot clef pour obtenir le polymorphisme d'heritage est en deduire
que ca correspond a la definition 'no polymorphism', c'est un
non argument.

'C n'a pas de type non signe (comme Java) car il faut rajouter
le mot clee "unsigned" pour en avoir, ce n'est pas actif par defaut'...

Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à
tort et à travers et de préférer les approches à base de templates.


De toute facon, aucun usage n'est recommande "a tort et a travers".

Donc, en quoi C++ est-il 'basée objet' ?


Grouper des choses dans des objets, définir constructeurs et
destructeurs selon l'idiome RAII, le C++ c'est avant tout cela.
Et on voit que la programmation basée objet en est un élément clé.


'Tu' vois peut etre plein de choses. Je ne connais pas de
definition claire de 'prog basee objet', ni de 'orientee objet'.
Mais la ref que tu as donne definit des criteres dans lequel C++
n'entre pas.

Je ne suis pas contre une discussion sur des nuances dans
le monde objet, je suis pret a reconnaitre les limites de mes
connaissances, mais si en cours de discussion il y a des arguments
du genre 'il n'y a pas de polymorphisme dynamique en C++
parce que ce n'est pas active par defaut', ca va me lasser.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)