2013-04-06 3 views
9

На данный момент я вообще не использую заголовочные файлы. Классы каждый в одном файле .cpp полностью. Но чтобы сохранить время компиляции, я хочу использовать файлы заголовков. Я надеюсь, что Visual Studio не будет компилировать классы, которые тогда не были изменены для отладочных сборников.Должен ли я упоминать частные методы в файле заголовка класса?

Есть ли способ упоминать только публичные методы и члены в файле заголовка. Теоретически это будет достаточно информации для компилятора. Если другой файл, например, main.cpp, включает заголовок класса, нет необходимости в частных методах и членах, не так ли?

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

ответ

3

Я не знаю, как сделать то, что вы просите, но есть другой способ дать некоторую изоляцию.Возможно, вы захотите взглянуть на pimpl idiom, поскольку он предлагает изоляцию частной информации. Это немного дополнительная работа, но это может быть чрезвычайно полезно, особенно в крупных проектах.

11

Если в другом файле, например main.cpp, содержится заголовок класса, нет необходимости в частных методах и членах, не так ли?

Нет, public методов и членов не обязательно достаточно. Например, если другой .cpp файл был попытаться создать экземпляр вашего класса:

SomeClass instance; 

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

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

Путь вещь, как правило, делается в C++ является то, что объявление класса всего идет в заголовочном файле, а также определение в некотором роде раскол между заголовочным файлом и соответствующим .cpp файлом. Точный раскол определяется различными техническими соображениями. Например, шаблоны и встроенные функции обычно должны отображаться в файле заголовка. С другой стороны, размещение кода в файлах заголовков увеличивает зависимость и потенциально увеличивает время.

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

4

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

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

Как только вы объявите класс в файле заголовка, вы должны объявить все его методы и члены внутри декларации класса в заголовке, учитывая, что ваш класс больше не объявлен в файле cpp.

Смежные вопросы