IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

Acceder aux attributs de la classe mère


Sujet :

C++/CLI

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 84
    Points : 53
    Points
    53
    Par défaut Acceder aux attributs de la classe mère
    Bonjour,

    Je suis à la recherche d'une solution afin de pouvoir exploiter dans différentes classes, une même donnée commune.
    Je pensai créer une classe "application" dont un attribut serait "cheminApplication", et de construire mes nouvelles classes en les héritant de ma classe "application".
    A chaque fois que j'en ai besoin dans mes classes fille, j'accède à l'attribut "cheminApplication" de ma classe mère.
    Est-ce une bonne solution ? Feriez-vous différement ?

    Mon exemple me donne un résultat null.
    Comment accéder depuis mon traitement spool à l'attribut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    int _tmain(int argc, _TCHAR* argv[])
    {
       application ^ myApplication = gcnew application;
       spool ^ mySpool = gcnew spool;  
     
       myApplication->cheminApplication = *argv;
     
       mySpool->traitementSpool();
    };
     
     
     
    void application::afficherChaineApplication()
    {
    	printf("Chemin application : %ls\n",cheminApplication);
    };
     
    void spool::traitementSpool()
    {
    	printf("Chemin spool : %ls\n",cheminApplication);
    };

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ref class application 
    {
    public:  
    	_TCHAR* cheminApplication;
    	void afficherChaineApplication();
     
    };
     
     
    ref class spool : public application
    {
    public:
    	void traitementSpool();
    };

  2. #2
    Expert confirmé Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Points : 5 522
    Points
    5 522
    Par défaut
    Bonjour,

    Si tu veux accéder aux mêmes données, ce que tu proposes ne peut pas marcher. En effet, lorsque tu instancies tes classes dérivées, tu instancies également ta classe de base. myApplication->cheminApplication ne pointe donc pas au même endroit que mySpool->cheminApplication et il est logique que mySpool->cheminApplication soit null puisque tu ne l'as pas affecté.

    Pour partager des données, tu peux utiliser une classe statique ou un singleton auxquels tu pourrais accéder depuis chacun de tes objets.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 84
    Points : 53
    Points
    53
    Par défaut
    Impeccable Merci, avec une classe statique ca fonctionne.
    Merci encore.

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 706
    Points : 2 484
    Points
    2 484
    Par défaut
    Bonjour.

    Inutile de passer par une classe statique ou un singleton, il suffit simplement de mettre l'attribut en static pour qu'il soit commun à toutes les instances (c.f. la FAQ).

    Cependant, si plusieurs instances peuvent accéder à la même donnée en lecture et en écriture, il faudra faire attention aux problèmes de concurrence. En revanche, si il y a une écriture au début, puis uniquement des lectures, il n'y aura pas ce soucis.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Au passage, pour éviter des soucis, je te conseillerais de bosser en String^ le plus tôt possible; et en fait, d'utiliser la version managée du main() (int main(cli::array<System::String^>^ args)) plutôt que cette version qui date de C.

    Autre chose, argv[0] ne contient pas le chemin du programme, mais seulement ce qui a été tapé pour le lancer.
    Le mieux pour obtenir le chemin du .exe en .Net, c'est de passer par la classe System::Reflection::Assembly.

    Un truc du genre System::Reflection::Assembly::GetEntryAssembly()->CodeBase devrait te donner le chemin de l'EXE, et si ce n'est pas ->CodeBase, alors ce doit être ->Location.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 84
    Points : 53
    Points
    53
    Par défaut
    Merci !

Discussions similaires

  1. comment acceder aux variables de la classe Mère ?
    Par vacknov dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/08/2007, 19h30
  2. [XSLT] Acceder aux attributs
    Par azertyman dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 28/09/2006, 12h53
  3. Réponses: 1
    Dernier message: 18/08/2006, 10h34
  4. [vb.net 2.0]Acceder aux variable d'une classe
    Par kissskoool dans le forum Windows Forms
    Réponses: 8
    Dernier message: 21/06/2006, 19h54
  5. Réponses: 16
    Dernier message: 07/02/2006, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo