Alexiuscrow
@Alexiuscrow

Как полю класса А обратится к приватной функции класса А?

Есть лифт (класс "Elevator "), в котором находится кнопка (класс "Button"). При нажатии на кнопку (функция "push") должен пойти сигнал в лифт (функция "decide"), где на основании имеющихся данных лифт примет решение ехать/не ехать, если всё же ехать то на сколько этажей. Для того чтобы кнопке обратится обратно в лифт, в котором она находится в класс "Button" был добавлен указатель на лифт. Этот указатель передаётся в конструктор класса "Button" через ключевое слово "this".
Но функция "decide" отмечена спецификатором "private" тк мы не желаем что бы кто угодно мог "дёргать" эту функцию и хотим спрятать подальше от посторонних глаз.
Но как в таком случае кнопке добраться до функции "decide"?
P.S. Кроме фрэндли функций/классов.
class Elevator 
{
private:
	Button* button;
	void decide();
};

class Button
{
private:
	Elevator* elevator;
public:
	Button(Elevator &elevator);
	void push();
};
  • Вопрос задан
  • 2433 просмотра
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Можно сделать так:
Elevator реализует приватный интерфейс ButtonControlled с одним публичным методом -- decide. Приватность интерфейса гарантирует, что только Elevator сможет дать его кому захочет. Button получает от Elevator не ссылку на Elevator а ссылку на ButtonControlled, в котором счастливо вызывает decide.
Типа того:
class ButtonControlled
{
public:
  virtual void decide() = 0;  
};

class Elevator : ButtonControlled
{
private:
  Button* button;
  virtual void decide();
};

class Button
{
private:
  ButtonControlled* controlled;
public:
  Button(ButtonControlled &controlled);
  void push()
  {
    controlled->decide();
  }
};

Elevator::Elevator()
{
  button = new Button(*this);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы