105 votes

Les champs statiques sont-ils hérités ?

Lorsque des membres statiques sont hérités, sont-ils statiques pour l'ensemble de la hiérarchie ou seulement pour cette classe, par exemple :

class SomeClass
{
public:
    SomeClass(){total++;}
    static int total;
};

class SomeDerivedClass: public SomeClass
{
public:
    SomeDerivedClass(){total++;}
};

int main()
{
    SomeClass A;
    SomeClass B;
    SomeDerivedClass C;
    return 0;
}

serait-il de 3 au total dans les trois cas, ou de 2 pour les cas suivants SomeClass et 1 pour SomeDerivedClass ?

0voto

adzm Points 2366

3 dans les trois cas.

Et pour votre autre question, il semble que vous ayez simplement besoin d'une variable const au lieu de static. Il serait peut-être plus explicite de fournir une fonction virtuelle qui renvoie la variable dont vous avez besoin et qui est surchargée dans les classes dérivées.

À moins que ce code ne soit appelé dans un chemin critique où la performance est nécessaire, optez toujours pour le code le plus intuitif.

0voto

Niki Yoshiuchi Points 7822

Oui, les classes dérivées contiendraient la même variable statique, c'est-à-dire qu'elles contiendraient toutes 3 pour le total (en supposant que le total a été initialisé à 0 quelque part).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X