Я создаю приложение windows: forms. Я прочитал некоторые из ответов, чтобы попытаться понять концепцию .h (заголовочный файл) & .cpp (файлы реализации). Когда я создал графический интерфейс для своего приложения. Я заметил, что код помещается в файл .h. Но когда я дважды щелкнул элемент управления кнопкой, чтобы добавить код в процедуру, код был создан в файле .h вместо файла .cpp. Я разрезаю и помещаю этот код в .cpp-файл, или это то, в которое входят ссылки? Процедура дефиниции сохраняется в файле .h и будет связана с кодом процедуры в файле .cpp.В чем разница между .h (заголовочный файл) и .cpp-файлом?
ответ
Здесь есть два соображения. Во-первых, файлы заголовков не так важны в управляемом коде, как в родном C или C++. Управляемые компиляторы кода считывают объявления из метаданных сборки, вы не должны (и не должны) писать декларации типа C++/CLI, которые должны быть видимы в других модулях в файлах заголовков. Получение их из метаданных делает ваши типы доступными для любым .NET языком.
Но настоящая причина связана с тем, как дизайнер форм работает в среде C++. Это генератор кода, управляемый элементами управления, которые вы бросаете в форме или пользовательском элементе управления, и свойствами, которые вы задали в окне «Свойства». Существует очень неудобная проблема, если генератор кода должен генерировать код в двух отдельных файлах. Не столько генерирующий бит, сколько , удаляющий код при изменении дизайна формы. Получение файлов из синхронизации затрудняет диагностику ошибок компиляции из автоматически сгенерированного кода. Это гораздо более вероятно, чем вы думаете, кстати, генератор кода должен работать с файлами исходного кода, которые находятся в процессе редактирования. Очень сложно, что код вообще не разбирается.
В C++ IDE используется оригинальный подход, используемый разработчиками версии 1.1 C# и VB.NET, все идет в одном файле. Конечно, это неприятно, декларации и код не должны смешиваться. Это было решено в этих дизайнерах для версии 2.0, добавив поддержку языков C# и VB.NET для частичных классов. Однако этого не произошло для C++/CLI. Непонятно, почему команда C++/CLI всегда выглядела ограниченной по сравнению с другими командами. У него также нет никакой поддержки рефакторинга, которая очень важно переименовать методы при изменении имени класса. Сохранение методов inline позволяет избежать проблемы.
Anyhoo, вы можете получить свой код в файле .cpp, но вы должны сделать это сами. Cut + paste делает это, но вам также придется изменить имя класса обратно в объявления метода. Это высокое техническое обслуживание, подумайте, стоит ли это делать. Также подумайте, действительно ли вы хотите использовать C++/CLI для пользовательского интерфейса, это необычный выбор.
Функциональные прототипы (вы назвали их определениями процедур) должны идти в файле заголовка (вместе с макросами). Любой код должен находиться в файле .cpp.
Если вы уверены, что то, что вы думаете о перемещении, это код, его следует переместить туда. Это поможет вставить код.
Если вам не повезло, вы можете обнаружить, что ваш инструмент CASE не сможет найти код после его перемещения; Я бы предложил попробовать это немного за раз. –
Файлы заголовка (* .h) предполагают содержать определения ваших классов, методов и типов, в то время как файлы cpp предполагают наличие деталей реализации. В файлах заголовков также есть встроенные и короткие методы.
Эта практика не применяется компилятором, поэтому вы можете написать реализацию (то есть код) внутри файла заголовка.
Как указывали другие, заголовочный файл предназначен для объявлений классов, функций, типов и т. Д., В то время как .cpp-файл должен содержать реализации функций. Однако компилятору все равно, где написан код реализации, поэтому вы можете поместить весь свой код в заголовок. Но при этом будет увеличиваться время компиляции, потому что весь этот код будет скомпилирован в каждом файле, в который вы включаете этот файл заголовка.
Сохранение реализации отдельно очень полезно, если вы хотите распространять свой код, но нужно сохранить собственный код скрытый. В этом случае вы можете создать библиотеку из кода реализации и распределить заголовок вместе с библиотекой.
Исключение из этого при написании кода шаблона; в этом случае реализация должна войти в заголовок, потому что компилятор должен «видеть» его у callsite.
Лично я перемещаю этот автоматически сгенерированный код в * .cpp файлы. В файлах * .h я оставляю функции, которые не будут меняться очень часто. Я делаю это, чтобы быть уверенным, что время компиляции не будет сильно увеличиваться после каждого изменения, которое я сделал.
- 1. Почему заголовочный файл Head1.h не содержит заголовочный файл Head2.h, который включает Head1.h?
- 2. разница между включением в файл .h и .c файл
- 3. В чем разница между типами h: commandbutton?
- 4. заголовочный файл (.h) создание в программирования C
- 5. В чем разница между #import "" в файлах .h и .m?
- 6. В чем разница между .cpp-файлом и файлом .h?
- 7. В чем разница между H.264 и x.264?
- 8. В чем разница между p: commandlink и h: commandlink?
- 9. разница между определением @interface в .h и .m файл
- 10. В чем разница между TCHAR и WCHAR?
- 11. Microsoft заголовочный файл #include (.h) для «_HFILE»
- 12. Разница между a4j: commandButton и h: commandButton
- 13. Разница между тестом -h и тестом -L
- 14. В чем разница между .h и .H файлом головы в C++?
- 15. В чем разница между JSF и Facelets?
- 16. В чем разница между `my ($ h, @s) = @_;` и `my ($ h, @s) = grep $ _, @_;`
- 17. В чем разница между «и»?
- 18. В чем разница между `{}` и `[]`?
- 19. В чем разница между == и ===?
- 20. В чем разница между «+» и «\ +»?
- 21. В чем разница между + = и = +?
- 22. В чем разница между/* ... */и/** ... */
- 23. В чем разница между: и +:
- 24. В чем разница между $ {} и # {}
- 25. В чем разница между $ _. и $ _
- 26. В чем разница между = и: =
- 27. В чем разница между && и &?
- 28. В чем разница между $ {} и # {}?
- 29. В чем разница между + и%?
- 30. В чем разница между + = и = +
Возможный дубликат [CPP | .h файлов (C++)] (http://stackoverflow.com/questions/1990156/cpp-h-files-c) –
Не дубликат, файлы .h * играют * очень * различную роль в коде Windows Forms, написанном на C++/CLI. –