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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
#1

Как правильно включать хедеры? - C++

20.11.2011, 00:33. Просмотров 1539. Ответов 25
Метки нет (Все метки)

Допустим, программа разбита на три исходника:
main.cpp - тут лежит main
abc.h - тут объявлен класс abc
abc.cpp - тут определены методы этого класса

Вопрос: куда стилистически корректнее включать хедеры? Все записать в abc.h, а в остальные файлы включать только его? Или в каждый исходник включать необходимый для него хедер, при том, что тот же iostream понадобится и в мэйне и в определениях методов? Или как-то иначе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 00:33     Как правильно включать хедеры?
Посмотрите здесь:

хедеры - C++
чем отличаются хедеры написаные <вот_так.h> от "такиих.h" ?

Хедеры в поддиректориях CodeBlocks - C++
Добрый день! Пытаюсь подключить к CodeBlocks на Ubuntu хедеры для GTK. Выбираю Settings->Compiler->Search Directories и прописываю туда...

Зачем включать <iostream> и <stdio.h> одновременно? - C++
Не первый раз встречаю такой код: #include &lt;stdio.h&gt; #include &lt;iostream&gt; В этом что, есть какой-то сакральный смысл?

Написать программу, которая должна включать функции - C++ - C++
Задача Написать программу, которая должна включать функции для: - Ввод и вывод данных массива структур, - Выборки информации по...

В каких случаях необходимо включать include string - C++
В каких случаях необходимо использовать инструкцию препроцессора #include &lt;string&gt;? Раньше я думал, что это необходимо всякий раз, как я...

Создайте новую програму, которая будет включать класс fraction - C++
Создайте новую програму, которая будет включать класс fraction, созданные в Том упражнении. ...

Почему у меня для использования функций cstring не нужно включать прототип библиотеки - C++
Я недавно начал осваивать с++ с помощью учебника и там по ходу главы создается тренировочный класс String для работы со строками и в нем...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prZzZ
Программист
110 / 90 / 5
Регистрация: 22.03.2011
Сообщений: 233
20.11.2011, 00:38     Как правильно включать хедеры? #2
Svinina, Здравствуйте...
В общем хидер включается там где он нужен...
Ну, а что касается отдельных библиотек, к примеру таких как MFC, то они диктуют свои правила...
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 00:44  [ТС]     Как правильно включать хедеры? #3
prZzZ, хорошо, ну а из моего примера <iostream> лучше в abc.h или в abc.cpp включить?
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
20.11.2011, 00:54     Как правильно включать хедеры? #4
Svinina, лучше включать заголовки только в те файлы, в которых они используются. Если в файле "abc.h" не упоминается ничего из заголовка <iostream>, то какой смысл его туда включать?
prZzZ
Программист
110 / 90 / 5
Регистрация: 22.03.2011
Сообщений: 233
20.11.2011, 00:57     Как правильно включать хедеры? #5
Svinina, лучше, конечно в abc.cpp, но это при том условии, если вы используете iostream для внутренних манипуляций, - в противном случае - если у вас методы принимают или отдают параметры iostream или у вас утилиты класса iostream или друзья и или online и т.д. - объявляете в abc.h
alkagolik
Заблокирован
20.11.2011, 05:27     Как правильно включать хедеры? #6
Svinina, а еще лучше скомпилировать abc.h и abc.cpp в статическую библиотеку, abc.a, подключить abc.h в main.cpp и компилировать с библиотекой abc.a.
Bers
Заблокирован
20.11.2011, 06:56     Как правильно включать хедеры? #7
Цитата Сообщение от alkagolik Посмотреть сообщение
Svinina, а еще лучше скомпилировать abc.h и abc.cpp в статическую библиотеку, abc.a, подключить abc.h в main.cpp и компилировать с библиотекой abc.a.
Ага, что бы тут же начать ловить проблемы с оптимизаций, с конфликтами дебаг/релиз версий, с различиями между настройками компилятора целевого проекта и либы. Да?

И все эти телодвижения только ради того, что бы однократно не включать ручками abc.cpp

Абалденный подход !
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
20.11.2011, 11:33     Как правильно включать хедеры? #8
Цитата Сообщение от Svinina Посмотреть сообщение
abc.h - тут объявлен класс abc
abc.cpp - тут определены методы этого класса
в abc.h можно просто скопировать структуры и классы(без статистических библиотек ) из других хейдеров
в abc.cpp можно просто вручную объявить extern нужные функция и скопировать нужные структуры и классы
Bers
Заблокирован
20.11.2011, 12:16     Как правильно включать хедеры? #9
Цитата Сообщение от Van111 Посмотреть сообщение
в abc.h можно просто скопировать структуры и классы(без статистических библиотек ) из других хейдеров
Зачем в один хэдер копипастить что-то из других хэдэров?
Когда можно тупо приинклюдить.


Цитата Сообщение от Van111 Посмотреть сообщение
в abc.cpp можно просто вручную объявить extern нужные функция и скопировать нужные структуры и классы
А это зачем вообще может быть нужно?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
20.11.2011, 12:48     Как правильно включать хедеры? #10
Цитата Сообщение от Bers Посмотреть сообщение
А это зачем вообще может быть нужно?
Цитата Сообщение от Bers Посмотреть сообщение
Зачем в один хэдер копипастить что-то из других хэдэров?
Когда можно тупо приинклюдить.
чтоб уменьшить объём
Bers
Заблокирован
20.11.2011, 12:50     Как правильно включать хедеры? #11
Цитата Сообщение от Van111 Посмотреть сообщение
чтоб уменьшить объём
Каким образом копипаста может уменьшить объем?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2011, 14:32     Как правильно включать хедеры? #12
Цитата Сообщение от prZzZ Посмотреть сообщение
в противном случае - если у вас методы принимают или отдают параметры iostream или у вас утилиты класса iostream или друзья и или online и т.д. - объявляете в abc.h
Можно использовать предварительную декларацию классов.
alkagolik
Заблокирован
20.11.2011, 16:45     Как правильно включать хедеры? #13
Цитата Сообщение от Bers Посмотреть сообщение
Ага, что бы тут же начать ловить проблемы с оптимизаций, с конфликтами дебаг/релиз версий, с различиями между настройками компилятора целевого проекта и либы. Да?
И все эти телодвижения только ради того, что бы однократно не включать ручками abc.cpp
Абалденный подход !
а вы включаете ручками new.cpp, cout.cpp, iterator_begin.cpp... (имена условные) ? Вы об их существовании даже не задумываетесь, потому что все они собраны в библиотеки.
fasked
20.11.2011, 16:52
  #14

Не по теме:

Цитата Сообщение от alkagolik Посмотреть сообщение
а вы включаете ручками new.cpp, cout.cpp, iterator_begin.cpp... (имена условные) ? Вы об их существовании даже не задумываетесь, потому что все они собраны в библиотеки.
Спасибо, поржал

Bers
Заблокирован
20.11.2011, 17:04     Как правильно включать хедеры? #15
Цитата Сообщение от alkagolik Посмотреть сообщение
а вы включаете ручками new.cpp, cout.cpp, iterator_begin.cpp... (имена условные) ? Вы об их существовании даже не задумываетесь, потому что все они собраны в библиотеки.
А вы уверены, что озвученные файлы вообще существуют?
Я сделаю вам прозрачный намек: стандартная библиотека шаблонов чуть меньше чем полностью реализована на шаблонах. Которым не нужны *.cpp

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

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

А ловить баги, и вносить изменения в уже скомпилированном коде, в котором нельзя просто так пошариться - это очень, очень, очень мега неудобно.

Одно дело цеплять к проекту уже протестированную и отлаженную библиотеку, в которую в принципе никаких изменений никто уже вносить не будит. И совсем другое - прицеплять скомпилированные части собственного проекта, а потом афигиевать от привалившей кучи "удобств".
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
20.11.2011, 17:50     Как правильно включать хедеры? #16
alkagolik, да, их включают ручками. Один раз. А потом используют make. Приколись.

(Естественно, речь не о стандартных библиотеках, а о своих файлах.)
Bers
Заблокирован
20.11.2011, 18:17     Как правильно включать хедеры? #17
Цитата Сообщение от volovzi Посмотреть сообщение
да, их включают ручками.
Вот это, кстати, реально вымораживает. Почему не сделали так, что б одноименные с хэдэрами спп автоматически втыкались в солюшн? Как это было реализованно в CodeWarrior.
Столько удобств бы сразу появилось
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 18:20  [ТС]     Как правильно включать хедеры? #18
Цитата Сообщение от Bers Посмотреть сообщение
Вот это, кстати, реально вымораживает. Почему не сделали так, что б одноименные с хэдэрами спп автоматически втыкались в солюшн? Как это было реализованно в CodeWarrior.
Столько удобств бы сразу появилось
Ну где-то втыкаются ИДЕшкой, как в том же КуТ.
Bers
Заблокирован
20.11.2011, 18:21     Как правильно включать хедеры? #19
Цитата Сообщение от Svinina Посмотреть сообщение
Ну где-то втыкаются ИДЕшкой, как в том же КуТ.
Нуууу... где то. Мне не над "где-то", мне над в студии.
Сходи к Билли Гейццу, скажи, что б исправили.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 18:25     Как правильно включать хедеры?
Еще ссылки по теме:

Создать структуру, которая будет включать в себя какой-то набор структур-компонент - C++
Всем привет! Есть несколько структур-компонент, выбор структуры зависит от некоторого условия (от флага 1/2/3...) Реально ли в...

Создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны. - C++
Создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны. Требуется реализовать операции:...

Обязательно ли включать cpp файлы посредством "add files to project"? - C++
Когда нажимаю &quot;add files to project&quot;, Microsoft Visual Studio 6.0. выдаёт &quot;инструкция по адресу ... обратилась к памяти.... память не может...

Как правильно записать алгоритм и как отобразить max и min? - C++
как правильно записать алгоритм и как отобразить max и min h = min {a,b,max{c,d}}

Как правильно записывать условные операторы и как прервать проверку при достижении результата? - C++
доброго времени суток форумчане, подскажите пожалуйста как остановить условие после правильно выполненного условия.#include &quot;stdafx.h&quot; ...


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

Или воспользуйтесь поиском по форуму:
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
20.11.2011, 18:25     Как правильно включать хедеры? #20
Bers, странно. Обычно в средах это как раз делается автоматически. Неужели в МСе этого нет? Ужас.
Yandex
Объявления
20.11.2011, 18:25     Как правильно включать хедеры?
Ответ Создать тему
Опции темы

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