J'ai une situation plutôt étrange où j'aimerais pouvoir définir certaines constantes qu'une sous-classe d'un ABC peut surcharger.Polymorphe static const constantes dans un ABC?
struct A {
static const int a = 20;
virtual int func() = 0;
};
struct B : public A {
static const int a = 3;
int func() { return 5; }
};
struct C : public A {
static const int a = 4;
int func() { return 3; }
};
Malheureusement, si j'utilise A *aPtr = new B
, aPtr->a
retournera 20, au lieu de 3.
Une solution que je vois est fonction d'une ligne (le long des lignes de func
dans l'exemple ci-dessus), mais la La syntaxe des constantes est un peu plus appropriée pour cette situation en particulier conceptuellement. Existe-t-il une manière syntaxiquement raisonnable de résoudre les constantes à utiliser lors de l'exécution, où le code appelant n'a pas besoin de savoir quoi que ce soit après la création de l'objet initial?
duplication possible de [Remplacer les variables statiques lors du sous-classement] (http://stackoverflow.com/questions/594730/overriding-static-variables-when-subclassing) –
Le raisonnement qui sous-tend cela est erroné: une constante est supposée être, eh bien, * constant *. Ce n'est pas toujours constant et parfois quelque chose d'autre. De même, les membres statiques sont des propriétés de classes, et non d'instances, ils ne jouent donc aucun rôle dans l'héritage, qui est un concept basé sur * instance *. –