begin process at 2012 05 30 04:39:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Surdéfinition statique (static) d'une variable membre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Surdéfinition statique (static) d'une variable membre

mardi 15 janvier 2008 à 11:34:08 | Surdéfinition statique (static) d'une variable membre

PetersonG

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
mardi 15 janvier 2008 à 12:40:59 | Re : Surdéfinition statique (static) d'une variable membre

PetersonG

Oups, petite erreur. Il fallait lire (enfin, j'aurais dû écrire.) :

class   B : public A
{
public:
    B();
    virtual ~B();
    static void   setA(int   _a)
    {
       a=_a;
    }
protected:
    static    int   a;
};


Quoi qu'il en soit, si qqun se posait cette même question, apparemment, ce sont juste deux symboles différents pour le compilo, c'est donc dupliqué, et pas surdéfinit, et à cause du mot clef "static", le symbole est différent pour le compilo, donc il n'y a pas conflict de nommage.

Si qqun a plus de précisions, je suis preneur ! ^^
mardi 15 janvier 2008 à 15:16:58 | Re : Surdéfinition statique (static) d'une variable membre

juju12

Réponse acceptée !
En fait pas de rapport avec le fait que les deux soient différents; la norme C++ permet d'appeler un membre d'une classe dérivée du même nom qu'un membre de la classe de base, en ce cas comme tu le pensais les deux membres sont dupliqués. Il n'y a pas conflit de nommage car la règle est que la variable utilisée est celle correspondant à la classe de l'objet; cependant tu peux tout de même accéder à la variable de la classe de base depuis une dérivée par la syntaxe :
objet.Base::membre.

un petit exemple pour convaincre :

#include

<stdio.h>

class

A

{

public

:

int a;

};

class

B : public A

{

public

:

int a;

};

__int32

main(void)

{

B c;

c.a=1;

c.A::a=2;

printf(

"%i\n",c.a);

printf(

"%i\n",c.A::a);

return 0x0;

}

mardi 15 janvier 2008 à 15:20:03 | Re : Surdéfinition statique (static) d'une variable membre

PetersonG

Ah bah voui ^^'

Des fois je cherche trop loin !
Merci beaucoup !


Cette discussion est classée dans : variable, class, static, classe, membre


Répondre à ce message

Sujets en rapport avec ce message

variable membre non static dans une fonction membre static [ par adrod ] J'ai une erreur du compilateur: Error C2597. Je suis allé sur msdn pour avoir plus de précision et ils me disent:To access the nonstatic member, you m probleme sur les class [ par JRB ] g trouve un cour sur les applications reseaux mais il manque des explications si quelqu'un pourrait me les apporrtais sa serais super je cherche a ajo template [ par ifren ] salutje veux utilise une classe D utilisant une variable qui peut etre double ou string, je deirve de cette dernier deux autre class Dnum et Dstrpour Variable et méthodes statiques, comment faire ? [ par neodelphi ] Bonjour tout le monde !Je suis actuellement de me lancer dans la réalisation d'un jeu utilisant directX. Pour avoir une base de temps en fonction de l variable private et static dans une classe [ par simtiers ] Salut ! Voilà, j'aimerais savoir comment fait-on pour utiliser une variable statique dans une classe, et que cette variable soit dans le bloc private Question : Variables static/méthode static/initialisation [ par Inutqen ] Bonjour à tous, j'ai besoin d'un coup de main :) J'ai un petit soucis avec un code C++, je suppose que la réponse à ma question se trouve quelque par déclarer un deque comme membre static ? [ par lalebarde ] Bonjour, J'ai des soucis pour déclarer un membre static de type deque dans une classe. Vu que la taille est flexible, est-ce possible ? pointeur de fonction membre [ par maximus4 ] bonjour a tous,je voudrai savoir comment on passe en paramètre d'une fonction membre une autre fonction membre d'une autre class déjà instanciéeex:cla problème lecture variable de classe dans un singleton [ par totoscill ] Bonjour, Je rencontre un problème pour lire une variable statique de ma classe singleton "model". En effet dans cette classe, je declare: .h: public variable privee et statique [ par Kangourou_Nomade ] Bonjour,Je voudrais utiliser une variable statique dans une classe ( un logger). cette variable est un mutex qui me permettraitde ne pas ecrire dans m


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales