C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

un class de type "final" en C++.

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Cloporte
Guest





PostPosted: Tue Mar 01, 2005 9:45 pm    Post subject: un class de type "final" en C++. Reply with quote



Bonjour,

J'apprends le java en ce moment et il est possible dans ce langage de
definir une class de type "final" pour eviter l'heritage (pour que la
class definit ainsi ne puisse pas avoir de descendance).

J'ai cherché a créer une telle class en C++ et je n'y arrive pas,
quelqu'un aurais t'il une idée de la manière de procéder ?


Kyomi.
Back to top
Fabien LE LEZ
Guest





PostPosted: Tue Mar 01, 2005 11:07 pm    Post subject: Re: un class de type "final" en C++. Reply with quote



On Tue, 01 Mar 2005 22:45:34 +0100, Cloporte <kyomi (AT) free (DOT) fr>:

Quote:
J'apprends le java en ce moment et il est possible dans ce langage de
definir une class de type "final" pour eviter l'heritage (pour que la
class definit ainsi ne puisse pas avoir de descendance).

C'est pas possible en C++. Du moins, pas directement.

Il y a deux méthodes principales pour gérer le problème :

- Ne pas mettre de destructeur virtuel
- Indiquer, dans la documentation de la classe, qu'il ne faut pas en
dériver.

Cf aussi <http://www.google.com/advanced_group_search>, et notamment
<http://groups-beta.google.com/group/fr.comp.lang.c++/browse_frm/thread/e3d7cc2d048ec07d/77661ee84bb74112?q=%22empecher+l%27heritage%22+group:fr.comp.lang.c%2B%2B&_done=%2Fgroups%3Fas_epq%3Dempecher+l%27heritage%26safe%3Dimages%26as_ugroup%3Dfr.comp.lang.c%2B%2B%26lr%3D%26hl%3Den%26&_doneTitle=Back+to+Search&&d#77661ee84bb74112>


--
;-)

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Wed Mar 02, 2005 8:15 am    Post subject: Re: un class de type "final" en C++. Reply with quote



Fabien LE LEZ wrote:
Quote:
On Tue, 01 Mar 2005 22:45:34 +0100, Cloporte <kyomi (AT) free (DOT) fr>:

J'apprends le java en ce moment et il est possible dans ce
langage de definir une class de type "final" pour eviter
l'heritage (pour que la class definit ainsi ne puisse pas
avoir de descendance).

C'est pas possible en C++.

Il y a toujours la solution classique :

template< typename C >
class BloquerLHeritage
{
friend class C ;
BloquerLHeritage() {}
BloquerLHeritage( BloquerLHeritage const& ) {}
} ;

class HeritageBloque
: private virtual BloquerLHeritage< HeritageBloque >
{
} ;

Quote:
Du moins, pas directement.

Effectivement, ce n'est pas ce que j'appellerais très direct.

Quote:
Il y a deux méthodes principales pour gérer le problème :

- Ne pas mettre de destructeur virtuel

Comme dans std::iterator ?

Quote:
- Indiquer, dans la documentation de la classe, qu'il ne faut pas en
dériver.

Je crois que le consensus, c'est plutôt que ce n'est pas
forcement une bonne idée de vouloir bloquer l'héritage ; que
l'héritage, en tant que technique C++ (et technique Java !) peut
servir à implémenter beaucoup de conceptes distincts, et que
s'il peut bien être raisonable de vouloir ne pas permettre
l'héritage polymorphique, il n'est pas raisonable de vouloir
bloquer toutes les utilisations possibles de l'héritage.

Note qu'en Java, déclarer une classe final, et ne lui donner
aucune fonction mutante, c'est l'idiome classiqeu d'implémenter
une classe à sémantique de valeur. Dans ce cas-là, je dirais que
l'importance de « final », ce n'est pas tant l'impossibilité
d'hériter (qui est plutôt un défaut), mais le message au
l'utilisateur, qu'il s'agit d'une classe à sémantique de valeur.
En C++, évidemment, l'équivalent, c'est de donner un
constructeur de copie et un opérateur d'affectation publics à la
classe. Ou plutôt, de ne pas déclarer l'opérateur d'affectation
privé, étant donné que le C++ a une sémantique de valeur par
défaut.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
Cloporte
Guest





PostPosted: Mon Mar 07, 2005 11:41 am    Post subject: Re: un class de type "final" en C++. Reply with quote

Merci beaucoup pour ces reponses.

Kyomi -
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.