Я обычно стараюсь организовать объявление класса так, чтобы другим было легко использовать указанный класс.
Обычно это так: public/protected/private
, в этом порядке, потому что это упрощает жизнь для читателей.
- Люди, которые используют этот класс, могут перестать читать, как только они достигнут тега
protected
, что-нибудь после не будет их беспокоить.
- Люди, унаследованные от класса, могут прекратить чтение, как только достигнет тега
private
, после чего все будет подробно.
Это, в сочетании с отсутствием написания кода методов в их точках объявлений, упрощает чтение интерфейса.
Однако есть несколько хитростей:
- при использовании программирования метатемплат, вам может понадобиться сначала объявлять типы, а потом методы, так что в итоге вы получите 2 серии
public/protected/private
- при использовании идиомы Key (вместо
friend
) у вас есть секция public
, которая фактически предназначена только для небольшой части пользователей и лучше изолирована либо внизу нормальной секции public
или после секции protected
.
Наконец, как прокомментировать проблему layout среди атрибутов. Инкапсуляция означает, что атрибуты должны быть private
. Итак, либо у вас есть struct
, и у вас есть public
, либо у вас есть класс, и у вас есть private
, смешивание двух означает нарушение инкапсуляции, и это ошибка в процессе создания.