Могу ли я передать указатель в качестве указателя на класс, чтобы я мог использовать все, что указано для указателя в классе? - PullRequest
2 голосов
/ 03 мая 2019

Позвольте мне объяснить это.

У меня есть два объекта одного класса в моей программе. Я установил сфокусированный объект на третью переменную, которая является указателем. Таким образом, я могу переключать сфокусированный объект с помощью этой третьей переменной-указателя и иметь доступ к каждой части моего кода, не зная, на какой объект сфокусирован.

Это выглядит следующим образом:

class MainClass
{
    OtherClass otherClass;

    Field fieldA;
    Field fieldB;
    Field *focusedField = &fieldA;

    void someMethod(){
         otherClass.othermethod();         

         focusedField = &fieldB;

         otherClass.othermethod();
    }

    void MainClass()
      : otherClass(focusedField);
    {

    }
}

Но теперь я хочу использовать этот указатель в другом классе, как это:

class OtherClass{
    OtherClass(Field *f){
        focusedField = f;
    }

    Field *focusedField;

    void otherMethod(){
        std::cout << focusedField->getState() << std::endl;
    }
}

И это работает частично ... Первый вызов метода otherMethod использует fieldA, что правильно, но второй вызов, после того как я изменил его на fieldB, все еще использует fieldA.

Я хочу заархивировать, что я передаю focusField в OtherClass, и он меняется, если я изменяю его в MainClass.

1 Ответ

0 голосов
/ 03 мая 2019

Чтобы расширить комментарий JS , если вы хотите «отслеживать» значение, вы сохраняете указатель или ссылку на него.Это все еще верно, если значение само по себе является указателем.Для правильности const вы должны объявить элемент OtherClass (и параметр конструктора) как Field *const &, так как не нужно менять, на каком фокусе стоит Field.Если ему также не нужно писать на какой-либо конкретный Field, используйте const Field *const &.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...