Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Officiels > Programmation > Lecture des commentaires

Vos commentaires sur :
L'héritage

Retour au tutoriel

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Pseudo Commentaire
Page : 1 
Hors ligne TheDead Master # Posté le 15/09/2007 17:17:56
4 8 15 16 23 42
Avatar
Groupe : Membres
Il y a une petite erreur :

Citation : M@teo
C'est une peu choquant au début


C'est dans "La dérivation de type".

Sinon, ben comme d'hab, très bon tuto ^^
 
Hors ligne M@teo21 # Posté le 15/09/2007 17:28:55
Doh ! Nuts. Mmh, donuts !
Avatar
Admins
Corrigé merci.

<tuto etat="redaction" mode="venere" target="c++" />

Ce qui se conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément.

Nicolas Boileau (je suis fan)
Autobiographe à ses heures perdues :p
 
Hors ligne hugo125 # Posté le 15/09/2007 17:58:28
Pourquoi faire simple ?
Groupe : Membres
Super tuto, comm' d'hab. Bravo.
Vivement Qt !!!
Hors ligne wado # Posté le 15/09/2007 18:14:56
Groupe : Membres
Bravo pour la réalisation de ce tutorial.

20/20

En ce qui concerne l'impression de ce tutorial,

il n'imprime pas tes schémas ???
Hors ligne Alp # Posté le 15/09/2007 19:48:20
Groupe : Membres
Je trouve anormal que tu ne parles pas dans le même tuto de la virtualité, le polymorphisme --- ne serait-ce que ça, quitte à attendre un peu plus pour publier.

Bref, pour le reste, c'est bien expliqué, oui.
 
En ligne shadosan # Posté le 15/09/2007 20:48:04
Oyé oyé, j'ai posté.
Avatar
Groupe : Membres
très sympa :D

je connaissait pas la redéfinition de méthodes / classes, mais tout le reste n'était pour moi que de la révision (de ce que j'ai appris de Java!). ^^

18/20, car je suis d'accord avec le fait qu'il manque la virtualisation (que j'ai appris sur un article wiki assez expéditif, je trouve).

Mais quand même, c'est assez clair ^^
 
Hors ligne pamaury # Posté le 15/09/2007 22:27:41
Avatar
Groupe : Membres
Est-ce vraiment nécessaire de mettre tout dans le même tuto ? Si on commence à parler de la virtualisation, il faut parler des méthodes virtuelles, virtuelles pures, de l'héritage virtuel, des classes abstraites ?! Pour quelqu'un qui vient juste d'apprendre l'héritage c'est peut-être un peu trop violent,non ?. Enfin je sais pas, j'expose juste un avis.
D'un autre coté, c'est vrai que l'héritage sans la notion de "virtualisation" limite un peu les choses...

Code en C/C++/D/CamlLight
*Site* perso(programmation): http://amaury.pouly.free.fr/Public/
 
Hors ligne Alp # Posté le 15/09/2007 23:04:28
Groupe : Membres
Ce qui m'embête dans ce que tu dis, c'est que l'on a pas appris l'héritage quand on ne connaît pas l'héritage multiple et la virtualité, principalement.

On a juste appris une nouveauté dans la syntaxe. Mais pas du tout comment on s'en sert généralement.

Et puis si je ne m'abuse, il n'y a rien sur l'héritage privé, composition VS héritage, tout ça.

Ca a beau être un document fait pour des "zéros", il faut qu'il soit correct et logique.

Il compte mettre quoi quand il parlera de virtualité : "Approfondissement de l'héritage" ? Non! L'héritage c'est surtout la virtualité, l'héritage multiple (présent dans peu de langages en tant que tel) !
 
Hors ligne Lutinbleu # Posté le 15/09/2007 23:18:17
"Cedant arma togae", Cicéron
Groupe : Membres
Très très bon tuto que j'attendais avec impatience et par lequel je ne suis pas déçu. :) Super boulot.

Lutinbleu,
mais pourquoi ont-ils tué MS-DOS ?
 
Hors ligne mystwarrior # Posté le 16/09/2007 00:04:17
Avatar
Groupe : Membres
Citation : M@teo21

Dans la classe Personnage, vous pouvez réécrire la méthode coupDePoing (avec le même prototype). Cette méthode possédant le même prototype, elle va écraser la méthode coupDePoing du Personnage. C'est elle qui va avoir la priorité et que le compilateur va appeler quand on créera un Guerrier.


Il y a une petite faute dans la redéfinition de méthode, c'est dans la classe Guerrier que l'on peut réécrire la méthode coup de poing :p .
Sinon tout le reste du tuto, nikel :D

Finaliste de prologin 2007
42 > epitech > epita > supinfo :p
La preuve => ICI
TEK2
Specialiste : C C++ SDL et derives OPENGL GTK QT X11 Unix xHTML PHP SQL AJAX JAVASCRIPT ... (si si tek powaa ^^ )
 
Hors ligne lmghs # Posté le 16/09/2007 02:27:37
Groupe : Membres
"virtualisation" ...? Tiens, c'est nouveau en C++ ça :-/
De plus, ne confondez pas le moyen d'obtenir la redéfinition et donc le polymorphisme (d'inclusion comme on dit), et les héritages virtuels. Ce sont deux choses différentes. Mais passons.
Pour l'héritage multiple, les classes abstraite, etc., il y a encore un peu de temps (contrairement à la redéfinition -- cf mes commentaires plus bas)

M@teo21. Comme d'hab, je commente en vrac.

Très très bien de parler de l'héritage en termes de "est-un" et non en termes de "réutilisation"! Merci. (si, si, j'insiste!)

<pinaillage>
Petit bémol pour ceux qui me lirait. La notion de "est-un" dans le monde OO, et parfois à des années lumières de ce que notre intuition nous dicte. Exemple typique: en maths, un carré est un rectangle. En OO, c'est faux et archi-faux. La notion maitresse derrière le est-un est la subtituabilité. On va hériter (publiquement) quand un objet d'un type fils peut toujours être utilisé en place d'un objet du type parent.
</>

Bien pour l'exemple RPG (plutôt que des trucs fumeux rarement bien modélisés). Cependant ce modèle est très limité : il ne permet pas le multiclassage. En général, je préfère mettre l'accent sur le distingo PJ/PNJ. Le truc qui contrôle dans un cas est un joueur, dans l'autre une IA. Et on peut même aller plus loin en définissant des sorts qui donnent le contrôle d'une entité, à une autre (p.ex. sorts de possession, charme personne, ...).

Arg. Je retire ce que j'ai dit pour la réutilisation
Citation : M@teo21
En C++, on utilise tellement de classes que bien souvent ça ne sert à rien de recréer une classe depuis le début, il vaut mieux hériter d'une classe plus "générale" pour éviter d'avoir à réécrire le même code 50 fois
:-(

Citation : M@atheo21
Vous verrez dans la prochaine partie sur la librairie C++ Qt qu'il y a souvent 5 ou 6 héritages qui sont faits à la suite. C'est vous dire si c'est utilisé !

Hum ... un arbre d'héritage qui se perd en profondeur est très généralement (et Dieu sait que j'ai envie de dire "toujours") un signe de design médiocre.

Ce que tu appelles "redéfinition" est en fait une surcharge (overloading) (les deux fonctions membre coexistent) et nullement une redéfinition (overriding) . Pour que l'on parle de redéfinition il aurait fallu que la fonction membre soit virtuelle. Ce qui n'est pas le cas ici.

Sans le "virtuel", je sens déjà venir les débutants sur le forum demander pourquoi la bonne fonction n'est pas appelée quand on passe par un pointeur du type parent alors que cela marche avec le type officiel.

Citation : M@atheo21
On peut affecter un objet fille à un pointeur ou une référence d'un objet mère

Pas "affecter" (comme dans Personnage::opérator=), mais substituer

Et effectivement, pointeurs ou références sont nécessaires.

D'ailleurs il manque des "*" dans le diagramme qui suit.



Hé hé. Je mets toujours "privé" par défaut. Même quand je sais que la classe sera héritée. Et quand je n'ai pas le temps de faire propre, je mets un petit coup de protected ni vu ni connu.


Pour le QCM, parler de "surdéfinition" est vicieux. Entre certains auteurs qui l'utilisent en place de "surcharge" et certains gurus qui pesent que cela veut dire redéfinition (tellement il est évident que overloading se traduit par surcharge) ... Non vraiment, c'est vicieux.


Conclusion. Bonne impression dans l'ensemble. Mais des questions seront soulevées par les 0 suite à l'"oubli" (je me doute bien que c'est un choix) de traiter le virtual. Sans parler des quiproquos à parler de redéfinition (ce qui chez les initiés rime avec "supplantation (de fonction)" et virtual), là où il ne s'agit que de surcharge.
 
Hors ligne MatteX # Posté le 16/09/2007 07:54:53
The cake is a lie!
Avatar
Groupe : Membres
J'aime bien la présentation générale du tuto! On reste dans un univers de Zér0 avec une épuration complète du flafla pour ne garder que le nécessaire.

Sans entrer dans les détails du polymophisme (qui n'a effectivement pas à faire partie de ce tuto) j'aurais qu'en même intégré l'utilisation du mot clé "virtual" avec "la dérivation de type". J'espère que ce sera ajouté bientôt car comme Imghs l'a remarqué : il va y avoir des dizaines de questions sur le forum.

Je suis certain que tu peux le faire simple, court et précis M@teo21 ;)

liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb
Mon futur ex-blog - Dernier Billet : 10 mars 2008
Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray!
 
Hors ligne Lyrke # Posté le 16/09/2007 10:07:32
love :)
Avatar
Groupe : Membres
Toujours aussi simple et génial tes tutos ;)
Sauf un endroit où tu as tort (à la fin où tu donnes la source complète)
Citation : M@teo21
[...]il ne fait rien d'extraordinaire. Mais il compile[...]

Le code ne compile pas car tu as oublié d'implémenter void frapperCommeUnSourdAvecUnMarteau(); dans Guerrier.cpp ;)

Sur ce, bonne chance pour la suite ^^
Hors ligne UltimAKnighT # Posté le 16/09/2007 13:13:02
Avatar
Groupe : Membres
Le cours est pas mauvais, cependant étant donné qu'il s'agit de l'avant dernier chapitre de cette partie et que le dernier traite des Elements statiques et constants, il manque beaucoup de choses.
Ne serait-ce que le polymorphisme, des notions fondamentales de C++ (dont l'héritage multiple) qui serviront pas mal en programmation Qt.

UltimAKnighT
 
Hors ligne mysterix # Posté le 16/09/2007 22:45:42
Avatar
Groupe : Membres
C'est vrai que si on ne parle pas de polymorphisme, l'héritage ne sert pas à grand chose... :-°

A part ça le tuto est très clair et très agréable comme d'habitude ! :) Merci !

Envie d'énigmes tortueuses ? :euh:
Alors à bientôt sur Mysterix !

Envie d'art sympa plutôt ? ^^
Alors allez voir ce que fait Emmanuel Harel !
 
Hors ligne _Yann_ # Posté le 17/09/2007 00:56:44
Groupe : Membres
Je rejoins la plupart des commentaires en regrettant l'absence d'une partie sur les classes abstraite et les fonctions virtuelles, surtout avant de passer au chapitre sur Qt... Cela dit tu as peut-être prévu d'en parler lorsque tu rencontreras un exemple adéquat (comme Sheila... ^^ ). Sinon le tuto est clair, bravo et merci.
Hors ligne kabuto_fr # Posté le 17/09/2007 02:41:58
Avatar
Groupe : Membres
Salut,

Je trouve ce chapitre excellent. Il introduit bien la notion d'héritage pour les debutants sans s'encombre de chose inutile a se stade. Aucun intérêt du polymorphisme ou de virtual pour le moment. A la fin de la lecture du chapitre les débutants peuvent parfaitement créer des class héritée d'autre class. Et commencer a s'amuser avec ça sans avoir besoin d'introduire des choses plus complexe.

J'ai trouver une seul erreur:
dans Avec l'héritage : la redéfinition de méthode
Citation : M@teo
Grâce à la redéfinition de méthode justement ! :D
Dans la classe Personnage, vous pouvez réécrire la méthode coupDePoing (avec le même prototype). Cette méthode possédant le même prototype, elle va écraser la méthode coupDePoing du Personnage. C'est elle qui va avoir la priorité et que le compilateur va appeler quand on créera un Guerrier.


il faut plutôt lire:
Citation : correction
Grâce à la redéfinition de méthode justement ! :D
Dans la classe Guerrier, vous pouvez réécrire la méthode coupDePoing (avec le même prototype). Cette méthode possédant le même prototype, elle va écraser la méthode coupDePoing du Personnage. C'est elle qui va avoir la priorité et que le compilateur va appeler quand on créera un Guerrier.


voila @+

La connaissance n'a d'intérêt que si elle est partagée.
 
Hors ligne Nanoc # Posté le 18/09/2007 17:15:43
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres
Je déplace les remarques que j'avais fait sur le forum C++ ici, il y a peut-être redondance avec ce qui a déjà été dit et je m'en excuse.

De manière générale en C++,on parle de fonction membre et pas de méthode. Le mot méthode est plutôt réservé aux fonctions virtuelles.

Quand tu parles de redéfinition de fonction membre, tu pourrais ajouter qu'on parle aussi de "masquage" dans ce cas là. La fonction membre de la classe mère est masquée par celle de la classe fille.
Dans le domaine il faudrait peut-être aussi préciser qu'on peut quand même appeler la fonction masquée de la classe mère en utilisant lôpérateur de résolution de portée ::

Il y a aussi le lapsus relevé au-dessus par culte.

Dans la partie sur la dérivation de type, peut-être serait-il bon de préciser que l'on peut utiliser un pointeur sur Personnage pour un Guerrier car justement Guerrier EST UN Personnage (et du même coup montrer que est un n'est pas que "heuristique")

Dans la partie sur "protected" tu pasrles de "classe qui se font dériver" ne serait-il pas mieux d'introduire le terme consacrer et parler de dérivation de classe ?

Je ne sais pas si c'est une bonn idée, mais ne serait-il pas intéressant aussi de parler des autres fomes d'héritage (héritage privé,protégé) ? Ce n'est sûrement pas essentiel mais comme on utilise le mot public pour la dérivation cela risque de susciter des questions. d'ailleurs voilà déjà un exemple de post de ce genre

-----------------------------------------------

Sinon, de manière générale, je dirais que c'est bien présenté, clair pour un débutant et bien expliqué comme à ton habitude.
 
Hors ligne lmghs # Posté le 19/09/2007 01:47:53
Groupe : Membres
Citation : Nanoc
Quand tu parles de redéfinition de fonction membre, tu pourrais ajouter qu'on parle aussi de "masquage" dans ce cas là.

Le "aussi" est de trop. Il y surcharge (*) et non redéfinition.

(*) qui avec une hiérarchie au milieu dégénère en masquage, mais c'est limite un détail qu'un débutant n'a pas forcément besoin de (sa/)voir. A la limite un simple conseil du style "Pour éviter de subtils effets de bord : ne surchargez pas des fonctions virtuelles, ne définissez pas plusieurs fonctions (sans "racine" virtuelle) avec même signature à divers niveaux d'une même hiérarchie ; plus de détails dans la FAQ c++lite §23.8"
 
Hors ligne c-sharp # Posté le 21/09/2007 15:20:04
le C/C++ j'en mange
Avatar
Groupe : Bannis
je trouve que ce tuto a un manque:
  • il ne parle pas de friends
  • il ne parle pas de virtualité
  • il ne parle pas de polymorphisme
  • il ne parle pas de l'heritage privé, protegé, et non plus de l'heritage multiple

<ta :euh: Qu'est ce que vous regardez?
 
Hors ligne PianoPâriss # Posté le 06/12/2007 21:43:20
Mac Pro Bi-Xeon user
Avatar
Groupe : Membres
Oula, ça m'a fait un paquet de lecture de me plonger dans le C++, j'hésitais mais les libs GUI m'ont convaincu !
Mais queqlues questions subsistent:
  • Quand on crée un objet de type fille, le constructeur mère n'est t-il pas automatiquement appelé ?
  • Quels sont les grandes différences entre structure dans structure en C et l'utilisation de l'héritage en C++ (mis à part le passage en paramètre) ?
  • Quelqu'un peut-il m'expliquer ce code:
    Code : C++ - Afficher / masquer les numéros de ligne
    1. class Forme {
    2. public:
    3.    virtual float Aire() = 0;
    4. };
    5.  
    6. class Carre:public Forme {
    7. public:
    8.    virtual float Aire() { return m_cote*m_cote; }
    9. private:
    10.    float m_cote;
    11. };
    Le but du "virtual" étant d'appeler les fonctions redéfinies dans les classes filles ?

Merci pour le tuto ;)

« La musique est l'aliment de l'amour. » [William Shakespeare]

Image utilisateur
Image utilisateur
Piano©~1
 
Hors ligne Sednem # Posté le 28/02/2008 22:40:01
IDOO un jour, IDOO toujours
Avatar
Groupe : Membres
Salut
C'est moi ou la qualité graphique des schémas s'est ameliorée depuis les debuts du cours sur le C ??? :D
sinon 20/20

PS : excusez pour les accents : je viens de taper des trucs qui s'afficheront en console sous windows ^^

cours en cours : C++, Blender
cours déjà lus : C, Xhtml/CSS
Autres feuilletés : Python, PHPImage utilisateur
Mon site
 
Hors ligne Midoagent47 # Posté le 16/03/2008 16:46:22
C++, C++ fort !
Avatar
Groupe : Membres
Wooow woow woooow STOOOP ! Il y a une faute ! :p

Partie : La dérivation de type, l'image. Tu n'as pas mis des pointeurs !!!!!!!

sinon, j'ai tout compris. Vocii ta note : Code : C++ - Afficher / masquer les numéros de ligne
  1. long int note = (noteMaximale == 20) ? 20 : noteMaximale


Hihi

Mon Problème Du Siècle : [SFML.Network] Le serveur ne veut pas recevoir le paquet
Clique : Mon site en construction (Plus maintenu)
 
Hors ligne funduk # Posté le 24/06/2008 17:49:49
Avatar
Groupe : Membres
Très bon tuto M@teo !
Enfin, ça doit te lasser de lire ça ... Mais c'est de ta faute !
Et puis en plus, comme d'habitude, 19, puisque personne n'est parfait ... Surtout pas un esclavagiste comme le Maître de la Cave ...

Quel est le meilleur site sur la photographie au monde ?

Comment peut-on poser une telle question :p ? hrphotographe bien sur ! :lol:
 

Vous devez être inscrit pour pouvoir poster des messages

Retour au tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 314 Zéros connectés | Requêtes SQL 6 requêtes | Temps de génération de la page : Total (SQL) 0.4173s (0.4066s)