Как предоставить доступ ко многим классам, все они получены из базового класса - PullRequest
1 голос
/ 12 декабря 2011

У меня есть класс Figure и его производные классы King, Queen, Rook, Bishop, Pawn и т. Д. Также есть класс Field, который моделирует характеристики шахматного поля.

Теперь все мои производные классы, а именно King, Queen, Rook и т. Д., Должны иметь доступ к личной информации, хранящейся в классе Field.Как я могу сделать это, а не писать вручную в поле класса: friend class King; friend class Queen; ...?

Есть ли способ обеспечить доступ ко всем этим классам одновременно к полю класса?

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Я собираюсь догадаться, что вашим производным классам "Фигуры" (King, Queen, Rook и т. Д.) Нужен доступ к частным полевым данным, чтобы перемещаться?

В идеале, я думаю, чтокласс Figure должен предоставлять какой-то открытый метод, который использует некоторую структуру данных для описания своих характеристик перемещения, и позволяет Field использовать этот открытый метод для манипулирования своими собственными внутренними частными данными.Каждый производный класс должен предоставлять свою собственную реализацию, чтобы они могли возвращать правильную структуру данных, описывающую их перемещение.

В качестве альтернативы, если вы должны предоставить доступ друзьям, я думаю, что вы, вероятно, можете попробовать использовать friend class Figure, а затем выставитьprotected методы класса Figure, используемые вашими производными классами, которые позволяют им манипулировать этими данными.

2 голосов
/ 12 декабря 2011

Подумайте, почему подклассы Figure должны иметь доступ к членам Field. Может быть, потому что вы хотите проверить, занят ли Field другой фигурой уже при выполнении хода?

Если это так, рассмотрите возможность перемещения этой логики в выделенный класс, например Move. Например, Move может содержать «источник» Field »и« цель »Field. Тогда вы можете иметь что-то вроде Game::apply( Move ) метода, который применяет Move к Game (изменяя состояние игры). В этом случае только класс Move может / может нуждаться в доступе к Field членам.

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

2 голосов
/ 12 декабря 2011

Измените классы так, чтобы штук не нуждался в доступе к доске .

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