Quando membri statici sono ereditati, sono essi statico per l'intera gerarchia, o solo quella classe, cioè:I campi statici sono ereditati?
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;
}
sarebbe Totale essere 3 in tutti e tre i casi, o sarebbe 2 per SomeClass
e 1 per SomeDerivedClass
?
buona spiegazione, ma la risposta numerica è in realtà 4, non 3. Vedere la mia risposta (http: // StackOverflow.it/questions/998247/are-static-members-inherited-c/998298 # 998298) –
+1, punto eccellente, sto modificando la risposta per indicare la tua, grazie! –
+1, anche se si dovrebbe dire più correttamente "+4 a qualunque sia il membro statico inizializzato su". Il membro statico non è né scope locale né scope di namespace, quindi deve esserci una definizione da qualche parte che assegna un valore (_not necessariamente a zero). In caso contrario, il codice non soddisfa la regola a una definizione e non verrà compilato. – Damon