2010-10-24 18 views
0
class Base 
{ 
    private: bool mEnabled; 
    public: bool getEnabled() { return mEnabled; } 
}; 

class First : public Base; 
{ 
    // ... 
}; 

class Second : public Base 
{ 
    Second() { 
     // I have to check First::mEnabled 
    } 
}; 

class Manager 
{ 
    First obj1; 
    Second obj2; 
}; 

J'ai un gestionnaire de classe qui gère 2 autres classes. Et je dois vérifier la variable mEnabled dans un tel objet d'un autre. Quelle est la bonne façon? Serait-ce juste si je vais faireStructure d'application

static bool mEnabled; 
static bool getEnabled(); 

p.s. Il y aurait seulement 1 objets de cette classe.

+0

1) Comment le constructeur de Second vérifie-t-il si les First sont activés à true 2) Vous voulez que First soit activé, Second ne soit pas construit? – Cratylus

+0

@ user384706 questions non liées :) J'ai juste besoin d'obtenir l'état de 'mEnabled' de l'objet de classe' First' dans l'objet de classe 'Second'. – Ockonal

+0

Désolé. Vous devez vérifier l'état, dans le constructeur de la deuxième classe? Et le constructeur devrait être sans argument? – Cratylus

Répondre

0

Au lieu de statique vous auriez probablement pour vérifier getEnabled dans votre gestionnaire de classe:

if(obj1.getEnabled()) 
{ 
    Second obj2; 
} 

Le problème est que vous voulez avoir accès à une autre classe sans relation entre eux. Donc, une classe de plus haut niveau a besoin de créer cette relation.

0

Vous pouvez appeler des fonctions membres sur certains objets en faisant précéder le nom de la fonction avec le nom de l'objet et un point:

void f(First& first) 
{ 
    if(first.getEnabled()) 
    ... 
} 

Si vous passez par le pointeur, utilisez un -> au lieu du .:

void f(First* first) 
{ 
    if(first->getEnabled()) 
    ... 
} 
+0

Je n'ai pas accès à l'objet de Première classe dans l'objet de Seconde classe. – Ockonal

+0

@Ockonal, pas clair sur ce que vous demandez, mais vous pouvez rendre l'activé de la classe de base statique, de sorte que si elle est définie, vous pouvez le vérifier par un objet – Cratylus

+0

@ user384706 J'ai posé des questions sur statique dans la poste. Je sais comment faire tout cela. Tout ce dont j'ai besoin c'est de savoir, n'est-ce pas "mauvais". – Ockonal

0

Donc, vous voulez avoir deux classes qui ne se connaissent pas pour communiquer? Bien qu'il soit très possible de supposer que vos classes ne seront instanciées qu'une seule fois dans la vie de vos applications, je ne le ferais pas. C'est une mauvaise pratique.

Je suggérerais certainement de laisser la classe au courant de l'autre comme suggéré dans la réponse ci-dessus. Si vous avez besoin de faire cela, vous pouvez utiliser un pointeur global vers votre classe et l'assigner après qu'il ait été instancié.