2010-10-24 3 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; 
}; 

У меня есть менеджер классов, который обрабатывает 2 других класса. И мне нужно проверить переменную mEnabled в одном из таких объектов из другого. Каков правильный путь? Было бы правильно, если я сделаюСтруктура приложения

static bool mEnabled; 
static bool getEnabled(); 

стр. Было бы только 1 объект этого класса.

+0

1) Как конструктор Second, проверьте, установлено ли значение First в true? 2) Вы хотите, чтобы First был включен, второй не был сконструирован? – Cratylus

+0

@ user384706 несвязанные вопросы :) Мне просто нужно получить состояние 'mEnabled' объекта класса' First' в объекте класса 'Second'. – Ockonal

+0

Извините. Вам нужно проверить состояние, в конструкторе второго класса? И конструктор должен быть не-arg? – Cratylus

ответ

0

Вместо статического вы, вероятно, проверить, будет для getEnabled в менеджере класса:

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

Проблема заключается в том, что вы хотите получить доступ к другому классу, без всякого отношения между ними. Поэтому более высокий класс должен создать это отношение.

0

Вы можете вызывать функции-членов в отношении некоторых объектов предшествующего имени функции с именем объекта и точкой:

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

Если вы проходите мимо указателя, используйте -> вместо .:

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

У меня нет доступа к объекту первого класса в объекте второго класса. – Ockonal

+0

@Ockonal, непонятно, что вы спросите, но вы можете сделать включенным базовый класс статическим, так что если он установлен, вы можете проверить его любым объектом – Cratylus

+0

@ user384706 Я спросил о статике в сообщении. Я знаю, как сделать все это. Мне нужно только знать, не так ли? – Ockonal

0

Итак, вы хотите иметь два класса, которые не знают друг о друге, чтобы общаться? Хотя очень возможно предположить, что ваши классы будут созданы только один раз в вашей жизни приложений, я бы этого не сделал. Это плохая практика.

Я бы определенно предложил рассказать классу о другом, как предложено в приведенном выше ответе. Если вам нужно это сделать, вы можете использовать глобальный указатель на свой класс и назначить его после его создания.

Смежные вопросы