[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux] C++ , problemes



Salut,

comment inline:
----- Original Message -----
From: "Eugène Sandford" <esa@albert.com>
To: <linux@lists.linuxbe.org>
Sent: jeudi 5 juillet 2001 12:25
Subject: Re: [linux] C++ , problemes


> Le Thu, 05 Jul 2001 11:41:30 +0200, Pascal Bleser <pbleser@atosorigin.com>
a écrit :
>
> > ...
> > > > Déjà, tu dois absolument les mettre virtual aussi dans la
> > > > classe dérivée (ether):
> > > > virtual char* name() {}
> > > > virtual void checkLayer() {}
> > > Pourquoi ?
> > Parce qu'avec virtual, la runtime va vérifier au moment de l'éxécution
> > via la table virtuelle (virtual table).
> > Et sans virtual, c'est à la compilation qu'est déterminé quelle méthode
> > est appellée.
>
> Ok, là, chuis d'accord pour la runtime table cf 2.5.5 du C++ 3ed de
Stroustrup.
> Mais c'est pas en contradiction avec l'obligation ou non du "virtual" dans
les classes-feuilles de ton arbre de dérivation.
>
> >
> > C'est une (grosse) erreur d'avoir virtual dans une classe de base et
> > de ne pas le répéter dans les classes dérivées. Faut *jamais* faire
ca...
> >
> Là, chuis pas d'accord.
> Si ta classe dérivée a une implémentation de la fonction virtuelle de la
classe dont il hérite ET qu'elle n'a pas de classe dérivée, tu n'es pas
obligé d'écrire 'virtual' pour la fonction dans la classe dérivée.
> Et ce n'est pas une erreur du tout, c'est la méthode normale
d'implémentation du C++ selon Stroustrup :
> Regarde le Stroustrup 3ed du C++, section 2.5.4 Les types abstraits.
> L'exemple de création d'une pile engendre une classe abstraite dont 2
fonctions (virtuelles pures dans la classe de base) sont redéfinies dans une
classe dérivée, *sans* virtual.
>
> [...]

meme si ce chers Bjarne l'ecris (je viends d'acheter le book), ca me parrait
plus logique de devoi specifier le virtual dans la classe derivée: si on
prends un tableau de pointeurs d'object de bases et que l'on appelle ma
fonction commune en série (oublions que la class de base etait virtuelle
pure, mais disons qu'elle est instanciable aussi), alors comment le late
binding peut il se mettre en place ? Il faut donc ajouter le virtual, de se
fait la Vtable blablabla ...

non ??



JeF


[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
[ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]