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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.63
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
#1

Правильное подключение заголовочных файлов - C++

04.08.2014, 22:22. Просмотров 5175. Ответов 20
Метки нет (Все метки)

Как подключать заголовочные файлы я знаю, но вот у меня есть вопрос, ответ на который я нигде не видел, не видел даже рекомендаций как правильней писать. А ситуация следующая: Допустим у нас есть два класса - one.h (one.cpp) и two.h (two.cpp). В two.h подключен заголовочный файл one.h. А в one.h подключен допустим библиотечный файл iostream. Так вот вопрос, если в two.cpp я хочу воспользоваться одной из функций файла iostream нужно ли мне и в этом классе подключать этот файл? Ведь по сути класс two.h видит iostream через one.h или все таки каждый класс должен быть в этом плане независим от других классов?

И второй вопрос по этой же части. Если я использую функции файла iostream в файле реализации (и нет никаких намеков на это в заголовочном файле), так может вообще нужно подключать файл iostream не в two.h, а в two.cpp.

Ну и если есть книги, рассматривающие подобные вопросы архитектуры кода, подскажите плиз)


Заранее благодарен!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2014, 22:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Правильное подключение заголовочных файлов (C++):

Правильное подключение заголовочных файлов - C++
Всем привет!!!Начал разбираться с ООП , и ... тут же возникла проблема. Пишу программу следующую есть два класса футболист и команда и...

Правильное включение заголовочных файлов - C++
Привет, хочу задать такой вопрос. У меня есть классы в файлах Menu.h, Options.h, About.h, Game.h, Pause.h. Каждый из этих классов должен...

Подключение заголовочных файлов - C++
Начал изучать С++, скачал несколько книг и заметил что в одних при включении заголовочных файлов (например iostream.h) используется запись:...

Подключение заголовочных файлов. - C++
У меня есть заголовочный файл: ...\1\2\file.h. в папке "1" есть file2.h. Как подключить к "file.h" "file2.h"?

Подключение заголовочных файлов - C++
Здравствуйте! Подскажите, можно ли сделать так, чтобы при создании нового консольного проекта, наиболее часто используемые файлы (например,...

Подключение заголовочных файлов - C++
Имею два файла Large Factorial.h #include <sstream> #include <iostream> #include <iomanip> #include <math.h> #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SatanaXIII
Супер-модератор
Эксперт С++
5609 / 2643 / 244
Регистрация: 01.11.2011
Сообщений: 6,502
Завершенные тесты: 1
05.08.2014, 11:47 #16
Evg, Убежденный, и в особенности хотелось бы послушать мнение славного -=ЮрА=-, такой конкретный пример:
есть множество классов, выполненных своими отдельными .h и .cpp файлами. И есть другое множество программных модулей, использующих эти классы. Хороша (или не знаю как выразиться) ли следующая реализация их подключения: переписать все файлы используемых классов в отдельный .h файл, который потом подключить в каждом .cpp файле каждого модуля. При чем не все классы используются в каждом модуле, а только лишь часть, и данная реализация позволяет не выписывать каждый требуемый класс в новый создаваемый модуль, а лишь подключать суммирующий заголовок. Какие у нее сильные/слабые стороны?
Evg
Эксперт CАвтор FAQ
17625 / 5849 / 376
Регистрация: 30.03.2009
Сообщений: 16,132
Записей в блоге: 26
05.08.2014, 12:44 #17
Любое разделение на отдельные файлы в первую очередь должно носить идеологический характер и только потом технический. Крайности типа "свалить всё в один файл" или "завести на каждый чих отдельный файл" тоже не уместны. Если ты в один *.h файл свалишь классы "треугольник", "квадрат" и "пятиугольник" - это нормальная ситуация. Если ты в один *.h файл свалишь классы "треугольник", "сотрудник офиса" и "барабан" - это будет выглядеть весьма сомнительно

Добавлено через 30 минут
Да, ещё один "бонус" от использования свалки с инклюдами. Предположим, у нас есть проект с 1000 файлов *.cpp. Есть хидер module.h. Из 1000 файлов только 3 файла в реальности потребляют module.h. Но, благодаря наносистеме из одного чудо-хидера, получается, что module.h подцепляется во все 1000 файлов проекта. Далее при изменении в module.h у нас идёт перекомпиляция всех 1000 файлов, хотя при нормальном подходе перекомпилировалось бы только 3 файла
deniska91
05.08.2014, 14:47  [ТС]
  #18

Не по теме:

Спасибо всем за ответы на мой вопрос

-=ЮрА=-
05.08.2014, 21:11
  #19

Не по теме:

...Мы написали 15 классов, некоторые с зависмостями от предыдущих. Мы хотим собрать один большой окнный проект, взаимодействуя между диалогами через указатели на объекты классов. Когда я вижу подобное подключение хедера

C++
1
2
#include "MyCustomcontrol.h"
class CustomDlg : public CDialog
(а в срр никак не закинуть т.к контрол нужен в диалоге. Мне хочется такому человеку отрубить руку и запретить писать. Глобальный файл дефайнов и хедеров имеет место быть.
А ещё больше нравится когда выкручиваются и делают неполное объявление класса
C++
1
2
class CCustomcontrol;
class CustomDlg : public CDialog
- такой народ хочется вообще стрелять.
Да иногда можно обойтись полумерами и подключать лишь то что необходимо, НО такое работает лишь до определённой сложности проекта, а потом начинаются повторные инклуды полотен хедеров, которых легко можно было бы избежать подключив всё в stdafx.h либо подобном по значению файле.
Если из вашего опыта вы не встречались с ситуациями когда проект просто нечитабелен из за постоянного беганья по цепочкам хедеров, то я рад за вас, но это ещё ничего не значит...
На счёт времени компиляции - с современными то аппаратными средствами на него вообще можно забить отдав предпочтение понятности и элеганстности листинга.

winnisp
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 25
05.08.2014, 23:41 #20
Цитата Сообщение от deniska91 Посмотреть сообщение
Как подключать заголовочные файлы я знаю, но вот у меня есть вопрос, ответ на который я нигде не видел, не видел даже рекомендаций как правильней писать.
Вроде бы уже люди все объяснили, но всеже добавлю. Книга Скотта Майерса "Эффективное использование С++" третье издание.
Правило 31: Уменьшайте зависимости файлов при компиляции.
В правиле затрагивается данный вопрос и подробно разбираются причины, но лучше не поленится и прочесть книгу полностью, ибо все советы просветляют разум и наделяют кучей экспириенса)
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
06.08.2014, 12:31  [ТС] #21
winnisp, да, я читал эту книгу. Надо будет снова перечитать для большего понимания
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2014, 12:31
Привет! Вот еще темы с ответами:

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

Подключение заголовочных файлов - C++
Здравствуйте. Возникают ошибки при компиляции проекта: 1. Указывает на указатель: 2. Указывает на указатель и коллекцию указателей: ...

Перекрёстное подключение заголовочных файлов - C++
Здоровеньки булы. Есть 2 класса, каждый в своём хедере. В классе А есть экземпляр (не указатель) класса В и наоборот. Как организовать...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.08.2014, 12:31
Ответ Создать тему
Опции темы

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