стиль кодирования — Соглашения C ++: структура заголовков и классов

Ну, это довольно тривиальный вопрос. Но я хотел бы знать, можно ли поместить несколько классов в один файл заголовка / исходного кода. Я часто видел, что для каждого класса есть другой заголовок и другой исходный файл, как в Java (не только по соглашению …)

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

Что же говорят об этом конвенции?

[Пример]

На данный момент у меня есть 3 класса в одном файле: сервер, ClientHandler для сервера и ServerManager.
Сервер управляет соединениями, ClientHandler управляет всем входящим и исходящим трафиком для каждого клиента, а ServerManager содержит некоторую логику, необходимую для запуска Сервера.

[Править] будь осторожен с моими способностями английского языка, я иностранец;)

0

Решение

Для каждого класса считается хорошей формой иметь собственную пару заголовок / реализацию.

Наиболее убедительная причина (для меня) заключается в том, что файлы названы в соответствии с классом, который они содержат. Это позволяет легко найти правильный код для объявления в коде. Если файл содержит более одного типа, его становится труднее назвать, и, следовательно, его сложнее поддерживать.

Впрочем, иногда это не так однозначно. «Основной» класс может иметь некоторый другой поддерживающий класс, который определенно является частью его интерфейса (в смысле интерфейса Херба Саттера), но по праву не относится к вложенному типу. Это должно быть редким, но такой случай может оправдать наличие более одного класса на файл.

Если у вас возникли проблемы с абстрагированием понятий (например, в приведенном вами примере), почему бы не пойти еще немного и поместить их в свои собственные файлы? Вы будут поблагодарить себя за это вниз по линии!

2

Другие решения

Там нет реального правила, кроме здравого смысла. Если два класса
тесно связаны, обычно их помещают в один заголовок.
И, конечно, не все в C ++ является классом; свободные функции
могут быть сгруппированы в различные заголовки в соответствии с
все, что кажется наиболее логичным.

Кроме того, не всегда существует отношение один к одному между
Заголовки и исходные файлы. Если ваш класс является шаблоном, есть
может вообще не быть исходным файлом. С другой стороны, если вы
написание библиотеки, которая будет широко использоваться, а класс не
полиморфный, вы, вероятно, захотите поместить каждую функцию в
отдельный исходный файл.

И многие классы определяются непосредственно в исходных файлах, а не в заголовках.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector