Une interface java correspondrait à une ABC C++ où toutes les fonctions membre sont virtuelles pure.
Une interface java correspondrait à une ABC C++ où toutes les fonctions membre sont virtuelles pure.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Pour moi non. En tout cas ce n'est pas une alternative équivalente. Une fois que tu as viré la classe de base, tu ne peux plus mettre tes animaux dans le même conteneur. Tu ne peux plus te servir que du polymorphisme statique, somme toute limité. Le remplacement de l'un par l'autre n'est généralement pas une option.
C'est marrant mais dans ma boîte, c'est plutôt les classes de politiques et les templates qui répondraient aux trois premiers points.
Au passage, un moyen de faire du sealing (empecher la possibilitée d'heritage d'une classe) est décrit dans cet article :
http://www.gamedev.net/reference/pro...tures/cppseal/
Personnellement, je trouve que faire en sorte que ce soit difficile (et induire chez l'utilisateur l'idée que c'est certainement inaproprié) est largement suffisant.
Avec :
il suffit d'écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 template < class T > class SealedBase { protected: SealedBase() { } }; #define Sealed(_CLASS_NAME_) private virtual SealedBase<_CLASS_NAME_> class Penguin : Sealed(Penguin) { };
Pour que son astuce ne marche pas mieux que la premiere :p
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class BigZ : Penguin, Sealed(Penguin) { }; int main() { BigZ test; }
Et pour la deuxieme astuce (compilo M$) j'écris :
Je te l'avoue, c'est tordu mais...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 class BigZ : Penguin, private virtual SealedBase<__COUNTER__-1> { };
Se servir de __COUNTER__ de cette manière est dangereux: supposons que la classe Penguin soit définie dans Penguin.h et que je définisse une autre classe Rotweiller dans Rotweiller.h. Si dans un cpp je fais un include de Penguin.h puis Rotweiller.h, __COUNTER__ vaudra respectivement N et N+1. Si dans un autre cpp j'inclus d'abord Rotweiller.h puis Penguin.h, les valeurs de __COUNTER__ ne seront plus les même. Au final, j'obtient plusieurs déclarations et définitions des classes sus-citées - ce qui provoque une phénomène du type "attention à la marche, oups, trop tard" au niveau du code...
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.
Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager