Где декларировать конструкции и т. Д.? - PullRequest
7 голосов
/ 05 апреля 2010

Должны ли все структуры и классы быть объявлены в заголовочном файле? Если я объявляю struct / class в исходном файле, что мне нужно поместить в заголовочный файл, чтобы его можно было использовать в других файлах? Кроме того, есть ли какие-либо ресурсы, которые показывают некоторые стандартные практики C ++?

Ответы [ 2 ]

7 голосов
/ 05 апреля 2010

Должны ли все структуры и классы быть объявлены в заголовочном файле?
Да. РЕДАКТИРОВАТЬ: Но их реализации должны быть в файлах cpp. Иногда пользователи, приходящие из C # или Java, не понимают, что реализация в C ++ может быть полностью отделена от объявления класса.

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

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

2 голосов
/ 05 апреля 2010

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

C ++ faq обычно является отличным ресурсом для лучших практик.

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