Структура приложения - PullRequest
       1

Структура приложения

0 голосов
/ 24 октября 2010
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();

ps. Будет только 1 объект этого класса.

Ответы [ 3 ]

0 голосов
/ 24 октября 2010

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

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

0 голосов
/ 24 октября 2010

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

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

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

0 голосов
/ 24 октября 2010

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

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

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

void f(First* first)
{
  if(first->getEnabled()) 
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...