Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.69
FanOfGun
6 / 6 / 1
Регистрация: 13.10.2012
Сообщений: 101
#1

реализация класса в .h файле хорошо или плохо? - C++

17.08.2013, 21:48. Просмотров 4959. Ответов 61
Метки нет (Все метки)

все знакомые мне ide разделяют класс на два файла: .h с описанием и .cpp с кодом, но, например, в boost .hpp файлы почти всегда содержат и реализацию классов, т.е. так тоже можно. так в чем тогда разница и когда какой способ нужно применять? заранее благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2013, 21:48     реализация класса в .h файле хорошо или плохо?
Посмотрите здесь:
Такой способ создание экземпляра класса хорошо или плохо? C++
C++ Глобальные указатели. Плохо или хорошо?
C++ Переменные на русском языке - хорошо или плохо?
Статические функции-члены - хорошо или плохо? C++
C++ Реализация класса в отдельном файле
C++ Реализация шаблонов класса в инлайн файле
Реализация шаблонов класса в инлайн файле C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
15296 / 6928 / 1096
Регистрация: 02.05.2013
Сообщений: 11,336
Завершенные тесты: 1
17.08.2013, 23:27     реализация класса в .h файле хорошо или плохо? #16
Цитата Сообщение от Uzer5 Посмотреть сообщение
а если для себя, то хоть селёдку в оливье нареж и пивком залей, ктож осудит?
Сам потом себя и осудишь
Croessmah
17.08.2013, 23:29
  #17

Не по теме:

Цитата Сообщение от Uzer5 Посмотреть сообщение
если делаешь для всех, то надо стараться придерживаться рецепта
Скажите это в армии

Убежденный
Системный программист
Эксперт С++
15296 / 6928 / 1096
Регистрация: 02.05.2013
Сообщений: 11,336
Завершенные тесты: 1
17.08.2013, 23:29     реализация класса в .h файле хорошо или плохо? #18
FanOfGun, на заметочку: почитайте про паттерн "мост".
Там тема изоляции интерфейса класса от его реализации выражена рельефно.
Что касается вопроса про разделение на h и cpp - я время от времени
переписываю свои же классы (из h в h + cpp) и тихо матерюсь: ну почему,
почему я не сделал этого сразу...
Croessmah
17.08.2013, 23:30
  #19

Не по теме:

Цитата Сообщение от Uzer5 Посмотреть сообщение
ктож осудит?
Что-то вспомнилось:
У печени бы руки были - они бы горло задушили

castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 23:33     реализация класса в .h файле хорошо или плохо? #20
DU, и часто случаются случаи когда надо править заголовочный файл, а реализацию в .cpp править не надо?
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.08.2013, 23:41     реализация класса в .h файле хорошо или плохо? #21
вы пишите код без ошибок? это очень круто.
вы пишите сразу оптимальный код? это тоже очень круто.
вам не приходится писать какие-то временные варианты для проверки какой либо реализации с целью отрефакторить, оптимизнуть, улучшить дебажность на время? не знаю круто это или нет.
все это мне часто приходится делать при устаканевшемся публичном интерфейсе класса.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 23:47     реализация класса в .h файле хорошо или плохо? #22
Цитата Сообщение от DU Посмотреть сообщение
вы пишите код без ошибок? это очень круто.
вы пишите сразу оптимальный код? это тоже очень круто.
Да, я и сам собой иногда горжусь.

Цитата Сообщение от DU Посмотреть сообщение
вам не приходится писать какие-то временные варианты для проверки какой либо реализации с целью отрефакторить, оптимизнуть, улучшить дебажность на время?
А вот тут как никогда удобна заголовочная реализация. Я вижу смысл в разделении на .h и .cpp в случае окончательного варианта при больших объемах кода.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.08.2013, 19:50     реализация класса в .h файле хорошо или плохо? #23
Если писать реализацию в цпп, то будет быстрее рекомпиляция, если в хедерах - будет быстрее рантайм за счет инлайнинга. В принципе, можно инлайнить и на стадии линковки, но чем больше становится кода в проекте, тем дороже это удовольствие.
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
19.08.2013, 05:58     реализация класса в .h файле хорошо или плохо? #24
Один и тот же код из хедера скомпилится столько раз сколько раз он включен в разные cpp файлы, не? Это как-то не правильно.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
19.08.2013, 09:58     реализация класса в .h файле хорошо или плохо? #25
Цитата Сообщение от FanOfGun Посмотреть сообщение
а изменение .h файла влечет за собой изменеие всех .h и .cpp файлов, которые его включают, правильно ведь пишу?
Правильно, если реализацию класса напишешь в .h файле то и что то изменишь то придется все файлы перекомпилировать которые включают этот .h файл в новые объектный код. Так в gcc. А в других компиляторах хз. как.
castaway
19.08.2013, 11:00
  #26

Не по теме:

Складывается такое чувство, что все поголовно пишут проекты в миллион строк и сотни файлов, и компиляция проходит минут по 30, а если вынести реализацию в заголовок то и все 30.5 минут...

fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 11:11     реализация класса в .h файле хорошо или плохо? #27
Цитата Сообщение от castaway Посмотреть сообщение
Я вижу смысл в разделении на .h и .cpp в случае окончательного варианта при больших объемах кода
Когда проект достигнет серьезных масштабов, то появится осознание того, что лучше бы сразу начали делать правильно.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
19.08.2013, 11:13     реализация класса в .h файле хорошо или плохо? #28
...
Цитата Сообщение от castaway Посмотреть сообщение

Не по теме:

Складывается такое чувство, что все поголовно пишут проекты в миллион строк и сотни файлов, и компиляция проходит минут по 30, а если вынести реализацию в заголовок то и все 30.5 минут...

fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 11:41     реализация класса в .h файле хорошо или плохо? #29
Цитата Сообщение от castaway Посмотреть сообщение
Складывается такое чувство, что все поголовно пишут проекты в миллион строк и сотни файлов, и компиляция проходит минут по 30, а если вынести реализацию в заголовок то и все 30.5 минут...
Дело не в полной компиляции проекта, а как раз таки в частичной. Если реализация какого-нибудь очень популярного класса находится в заголовочном файле, то после изменения одной строки в этой реализации, необходимо будет пересобирать практически каждый объектный файл. В обратном случае достаточно будет пересборки только одного объектного файла. А вот тут уже все зависит от размеров проекта. И даже если сборка всего проекта занимает 5 минут, то это все равно несоизмеримо долго по сравнению со сборкой одного файла.
Опять же, make не настолько умен, чтобы самостоятельно определить зависимости и не способен пересобрать все зависимые файлы. Это, в свою очередь, порождает весьма неприятное поведение, когда в один объектный файл заинлайнена уже новая версия класса, а в некоторые другие еще старая. Как говорится, счастливой отладки.
Тот факт, что директива #include просто подставляет содержимое указанного файла это давно известная проблема в мире C++.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2013, 11:54     реализация класса в .h файле хорошо или плохо?
Еще ссылки по теме:
Можно ли Хорошо посмотреть информацию о графическом файле в разных библиотеках? C++
Реализация класса на базе класса Stack с возможностью !индексирования! C++
C++ Перегрузка оператора индексации для класса плохо себя ведёт
Утилизация класса (размещение класса в другом файле) C++
C++ Посоветуйте книгу где хорошо описано внешнее сортировки, или хеширования

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
19.08.2013, 11:54     реализация класса в .h файле хорошо или плохо? #30
fasked, это все прекрасно понятно. Если внимательно прочитать все мои сообщения, то можно легко понять что речь идет о частном случае, когда проект небольшой, когда класс не популярный. Практика показывает что это намного удобней, при этом не замечаешь разницу в миллисекундах, потраченных на сборку проекта.
Yandex
Объявления
19.08.2013, 11:54     реализация класса в .h файле хорошо или плохо?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru