Должен ли я помещать классы в отдельные файлы на C++? [закрытый]

Я задаю этот вопрос, чтобы организовать мой код.

6 ответов


соглашение C и C++ - это один файл заголовка на библиотеку или раздел библиотеки, а не один файл заголовка на класс. Попробуйте сгруппировать связанные классы. Так, например, в стандартных библиотеках <set> содержит std::set и std::multi_set, но тогда те шаблоны, которые делают очень похожие вещи.

нет никакого действительно последовательного правила для публичных заголовков, хотя-Boost.асио имеет большой заголовочный файл с большим количеством в нем. Повышение.DateTime разделен достаточно далеко вниз, хотя все равно не до уровня одного типа.

вы можете поместить реализации функций-членов в один исходный файл на класс, если хотите. Даже один исходный файл на функцию, если вы следуете стилю GNU C, хотя я не думаю, что рекомендую это для C++. И вы всегда можете реализовать свои открытые заголовочные файлы, включив в них несколько отдельных заголовков.

это может зависеть от вашего контроля версий и процессов сборки, как ничего else-удобно менять класс, не касаясь файлов, содержащих что-либо, не связанное с классом, так как тогда минимальный минимум перестраивается и журнал изменений четко определяет, что изменилось из имени файла. Но класс не обязательно является границей того, что считается "несвязанным кодом".

например, если вы пишете коллекции с итераторами или классами, которые регистрируют слушателей с некоторой платформой, где слушатель будет действовать на основном классе, это не есть смысл разделить их. Морально говоря, это "внутренние классы", даже если вы не реализуете их как вложенные классы в C++.


Мне нравится хранить связанные классы в одном файле.

например, если бы у меня был функтор, который использовался в цикле for_each в другом классе, я бы обычно не помещал его в свой собственный файл. Это кажется чрезмерным - и отделяет код от того, где он будет использоваться слишком много.

однако, в общем, я пытаюсь отделить классы и попытаться иметь разумную древовидную структуру для.HPP файлы, которые объединяют их использование. На вершине этого дерева мне нравится есть все файл заголовка, который включает в себя целую библиотеку.


да. Как правило, один класс на пару .ч./СРР. Файлы должны быть названы в честь класса.


Это зависит от приложения. С некоторыми приложениями имеет смысл группировать различные классы вместе в одном наборе .ч./cpp файлы, если они тесно связаны. В противном случае стандарт разделения класса на заголовочные и исходные файлы, безусловно, является правильным способом сделать это.


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

тогда у вас есть MyClass.H, который содержит class MyClass {...} и MyClass.cpp, который содержит все MyClass'ы методов.

Если у вас много мелких классов, это становится немного сумасшедшим, поэтому рассмотрим несколько вариантов:

  • файл с именем пространства имен, например MyNamespace.h, MyNamespace.cpp
  • вложенные классы-имеет ли смысл обернуть определение класса внутри другого класса? Делая это, вы говорите, что вложенный класс вряд ли будет полезна без своего родителя.

приятно избежать дополнительного набора соглашений об именах, делая каждое имя файла совместимым с пространством имен C++ или именами классов, чтобы избежать необходимости придумывать новые имена или конвертировать из одного соглашения в другое.

Google руководство по стилю также имеет мнение, предпочитая имена файлов с подчеркиванием. См.http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#File_Names


да, рекомендуется хранить отдельные классы в отдельных файлах cpp, а затем называть файлы с помощью имени класса. На самом деле Java заставляет вас это делать.