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

1 2 3 4 5
Avatar
Mathias Gaunard

Faut pas exagérer. Autant oui le C++ ne se confond ni avec l'un
ni avec l'autre, et la confusion la plus courante et de croire que
C++ est un C augmenté du strict nécessaire pour faire de la POO,
autant prétendre que ça n'a 'rien à voir'...


Autant la programmation basée objet est un élément clé de C++, autant la
programmation orientée objet n'est rien de plus qu'un add-on.

Avatar
Fabien LE LEZ
On Wed, 17 Jan 2007 22:15:36 +0100, Mathias Gaunard
:

Autant la programmation basée objet est un élément clé de C++, autant la
programmation orientée objet n'est rien de plus qu'un add-on.


Houlà... C'est la suite du troll, ou ça veut réellement dire quelque
chose ?

Avatar
Mathias Gaunard
On Wed, 17 Jan 2007 22:15:36 +0100, Mathias Gaunard
:

Autant la programmation basée objet est un élément clé de C++, autant la
programmation orientée objet n'est rien de plus qu'un add-on.


Houlà... C'est la suite du troll, ou ça veut réellement dire quelque
chose ?


Ça veut réellement dire quelque chose.

Voir wikipédia pour une définition de la programmation basée objet:
http://en.wikipedia.org/wiki/Object-based_programming


Avatar
Michael DOUBEZ
On Wed, 17 Jan 2007 22:15:36 +0100, Mathias Gaunard
:

Autant la programmation basée objet est un élément clé de C++, autant
la programmation orientée objet n'est rien de plus qu'un add-on.


Houlà... C'est la suite du troll, ou ça veut réellement dire quelque
chose ?


Ça veut réellement dire quelque chose.

Voir wikipédia pour une définition de la programmation basée objet:
http://en.wikipedia.org/wiki/Object-based_programming


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

http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/
Section 1.3

Michael



Avatar
Marc Boyer
Le 18-01-2007, Mathias Gaunard a écrit :
On Wed, 17 Jan 2007 22:15:36 +0100, Mathias Gaunard
:

Autant la programmation basée objet est un élément clé de C++, autant la
programmation orientée objet n'est rien de plus qu'un add-on.


Houlà... C'est la suite du troll, ou ça veut réellement dire quelque
chose ?


Ça veut réellement dire quelque chose.

Voir wikipédia pour une définition de la programmation basée objet:
http://en.wikipedia.org/wiki/Object-based_programming


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). Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template), et on ne peut pas dire qu'un sous
ensemble très réduit des valeurs sont des objets. Ca ne peut pas
non plus être 2) puisqu'il n'existe pas d'objet 'prototype' qui
ne sont des instances d'aucune classe.

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

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
Marc Boyer wrote:
On Wed, 17 Jan 2007 22:15:36 +0100, Mathias Gaunard
:

Autant la programmation basée objet est un élément clé de C++, autant la
programmation orientée objet n'est rien de plus qu'un add-on.
Houlà... C'est la suite du troll, ou ça veut réellement dire quelque

chose ?
Ça veut réellement dire quelque chose.


Voir wikipédia pour une définition de la programmation basée objet:
http://en.wikipedia.org/wiki/Object-based_programming


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

), et on ne peut pas dire qu'un sous
ensemble très réduit des valeurs sont des objets. Ca ne peut pas
non plus être 2) puisqu'il n'existe pas d'objet 'prototype' qui
ne sont des instances d'aucune classe.

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


en rien ;-) Je pense que C++ n'a pas d'equivalent. Il regroupe une
combinaison unique de concepts (paradigmes), issue historiquement de son
objectif d'efficacite (il me semble). Hormis dynamic_cast (down cast),
aucune fonctionnalite C++ est "inefficace" (si elle est correctement
utilisee ;-), c'est a dire qui impose un cout indetermine et/ou
disproportionne par rapport a la fonction (le fameux "on paye que pour
ce que l'on demande" de BS). La contre partie, c'est que C++ ne propose
que des concepts qui crees des couplages forts (a part biensur
dynamic_cast ;-) et il faut une bonne dose de template pour que cela
devienne un peu flexible (d'un point de vu utilisateur). Note que
d'autres langages font bien pire.

De toute facon, ce genre de definition ne sert qu'a alimenter les
dicussions vu le nombre de modele objet en circulation. Mieux vaut
s'interesser aux specifites de chacun plutot que d'essayer de tout
mettre dans une seule boite a geometrie variable.

a+, ld.




Avatar
Azuriel
On Wed, 17 Jan 2007 13:47:38 +0100, Azuriel :

Le C++ a quand même plus à voir avec la POO que, par exemple, une
tranche de saucisson.


Oui, mais alors il faut que le saucisson soit bien sec. Du saucisson
trop mou, c'est pas bon.



Oui. Et si le saucisson est garni de petits morceaux de Beaufort, c'est
encore mieux.
Mais je crois qu'on s'éloigne du sujet.


Avatar
Jean-Marc Bourguet
Laurent Deniau writes:

Pour commencer, je suis d'accord avec

De toute facon, ce genre de definition ne sert qu'a alimenter les
dicussions vu le nombre de modele objet en circulation. Mieux vaut
s'interesser aux specifites de chacun plutot que d'essayer de tout mettre
dans une seule boite a geometrie variable.


et je me demande pourquoi j'ai pris la peine d'ecrire ce qui suis. Mais
j'ai comme l'impression que ca peut aider a mieux comprendre les concepts,
quels que soit le nom qu'on leur donne.

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). Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template



Si on reprend la nomenclature classique de Strachey completee par Cardelli
et Wegner (http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf), le
polymorphisme est ce qui permet a une expression d'etre valable pour
plusieurs types. On peut classer les manieres d'y arriver suivant qu'il
faille faire quelque chose explicitement pour chaque type (polymorphisme ad
hoc) ou pas (polymorphisme universel).

Le polymorphisme ad hoc se subdivise en celui optenu par les conversions
implicites (ou coercion) et celui optenu par la surcharge (overloading).

Le polymorphisme universel a deux mecanismes: soit on admet des types en
parametres (polymorphisme parametrique), soit on considere que certaines
valeurs peuvet avoir plusieurs types (polymorphisme d'inclusion).

Comme d'habitude, les frontieres peuvent etre plutot floues.

Tout ces types de polymorphismes peuvent avoir lieu statiquement, a la
compilation (sauf peut-etre le polymorphisme d'inclusion ou je ne vois pas
d'exemples) ou dynamiquement, a l'execution.

Le C++ permet:

- les conversions implicites, uniquement statiquement
- la surcharge statiquement (c'est la surcharge et les specialisations
explicites de templates en C++, ) ou dynamiquement
de facon restreinte (c'est le mecanisme des fonctions virtuelles)
- le polymorphisme parametrique statiquement (avec les templates)
- le polymorphisme d'inclusion dynamiquement (avec les pointeurs et les
references vers des classes).

Une bonne partie de la puissance du polymorphisme provient quand on combine
un polymorphisme universel (ce qui permet une ecriture unifiee) avec un
polymorphisme ad hoc (ce qui permet un comportement adapte aux types). En
C++ le polymorphisme d'inclusion et les virtuelles offrent une tres grande
souplesse a l'execution, les templates et la surcharge (surtout quand on y
inclus les specialisations explicites) offrent une tres grande souplesse a
la compilation.

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.

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
Marc Boyer
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 ?
}

Puis ça pourra aller dans la FAQ pour dépanner les débutants
et les moins débutants pas réveillé.

De toute facon, ce genre de definition ne sert qu'a alimenter les
dicussions vu le nombre de modele objet en circulation. Mieux vaut
s'interesser aux specifites de chacun plutot que d'essayer de tout
mettre dans une seule boite a geometrie variable.


Oui, mais parfois, ça me permet d'augmenter ma propre connaissance
des nuances. Peut-etre que celui qui à plus de recul sur cela le
voit comme inutile.

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
Jean-Marc Bourguet
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.

Voir aussi <43c27e60$0$28972$

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