J'ai ces classes C ++: la variable statique x code> sera partagée entre
A code> et
b code>, ou chacun d'entre eux aura-t-il sa propre variable indépendante
x code> (qui est ce que je veux)? p> p>
6 Réponses :
Il n'y aura qu'une seule instance de x code> dans l'ensemble du programme. Un bon travail est d'utiliser le CRTP :
template <class Derived>
class Base
{
protected:
static int method()
{
static int x = 0;
return x++;
}
};
class A : public Base<A> { };
class B : public Base<B> { };
Nice, tu as posté pendant que j'étais sur le point de soumettre :).
Mais ce que vous n'obtenez pas, c'est le polymorphisme, si cela est nécessaire.
Merci, j'ai oublié que j'ai résolu un problème très similaire il y a de nombreuses années, aussi avec CRTP :)
@neil polymorphisme n'est pas nécessaire, je voulais juste éviter d'avoir du code dupliqué
Il n'y en aura qu'un, partagé par les trois classes. Si vous souhaitez des instances séparées, vous devrez créer des fonctions distinctes dans les classes dérivées. P>
le premier. Les variables statiques locales sont liées à la méthode qui les contenant et code> existe dans une incarnation pour toutes les sous-classes (en fait, pour toute l'application, même si le reste du programme ne voit pas la méthode). p>
La variable sera partagée - elle est par fonction - dans ce cas, la fonction qu'il appartient est base :: méthode () code>. Toutefois, si
la base de classe code> était une classe de modèle, vous obtiendriez une instance de la variable pour chaque instanciation (chaque ensemble unique de paramètres de modèles réels) de la base
de classe code> - chaque instanciation est une nouvelle fonction. P>
Si vous faites X comme statique, il sera partagé parmi toutes les classes d'enfants. Aucun problème avec la fonction d'être statique. P>
Je suis sûr que ce sera partagé entre A et B.
Si vous souhaitez des variables indépendantes, vous pouvez utiliser le "modèle de modèle récurrent curieusement récurrent" comme: p> Bien sûr, si vous voulez un polymorphisme, vous devriez définir une classe uniforme «baser» que la base dérive de, comme A et B peut aussi être polymorphe. p> p> base code> est différente de la base
code> code> Comme: p>
N'est-ce pas quelque chose que vous pouvez vérifier rapidement avec un compilateur et un code de test?
@TTMRICHTER: Pas s'il y a des soupçons, il pourrait s'agir de la mise en œuvre. Et au moment où vous avez vérifié que ce n'est pas le cas, vous avez trouvé la réponse.
@TTMRICHTER J'ai soupçonné que la variable sera partagée, mais je voulais aussi voir si quelqu'un a une autre façon de résoudre mon problème :)