Bonjour,
Une drôle d'idée m'a fait surdéfinir en static une variable membre d'une classe parente, et, à ma grande surprise, le code compile sans problème sous MSVC++.
Plus concrètement, ça donne :
class A
{
public:
A();
virtual ~A();
void setA(int _a)
{
a=_a;
}
protected:
int a;
};
class B : public A
{
public:
B();
virtual ~B();
virtual void setA(int _a)
{
a=_a;
}
protected:
static int a;
};
B::a = 5;
B b;
b.setA(8);
Ce qui m'étonne, c'est qu'il n'y a aucun conflict de nommage, même à l'usage de la variable
a !
L'un d'entre vous saurait-il se qu'il se produit alors en mémoire ? Est-ce que la variable membre a
est dupliquée ? Si oui, comment se fait-il qu'il n'y ait pas de conflict lorsque j'accède à a
?Il me semble que la classe B "encapsule" la classe A genre :
____________________
| Class B |
| ________________ |
| | Class A | |
| |_______________ | |
|___________________ |
du coup, l'espace mémoire pour la variable membre
a devrait être réservé dans l'espace mémoire de la classe A.
J'avoue que je ne comprends pas ^^
D'avance merci !
Peterson