Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
#1

Назначение заголовочных файлов - C++

15.07.2013, 19:03. Просмотров 2421. Ответов 35
Метки нет (Все метки)

Я читала учебник и википедию - никак не доходит.

В общем, может я неправильно поняла: есть у меня "Моя программа.cpp", и есть "Заголовочный файл.hpp". В заголовочном файле прописаны прототипы функций, и классы без определения их методов, этот заголовочный файл включается в мою программу. Все определения содержатся, собственно, в моей программе.
Если это так, то я не понимаю, какой смысл выделять это в отдельный файл, если можно прописать то же самое в самом начале. Просто чтобы был отдельный список, и не надо было скакать вверх-вниз, если надо вспомнить какие параметры нужно передать в функцию?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 19:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Назначение заголовочных файлов (C++):

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

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

Подключение заголовочных файлов и файлов реализации - C++
Здравствуйте,при создании класса в visual studio руками не компилится проект,при создании через add class все работает,для примера написал...

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

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

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

35
0x10
2478 / 1651 / 247
Регистрация: 24.11.2012
Сообщений: 4,087
15.07.2013, 19:05 #2
Керра, если все определения разместить в заголовочном файле, затем его подключить в несколько cpp, то при сборке программы будет ошибка из-за множества определений функций. Объявлений может быть сколько угодно, определение - одно.
0
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:06 #3
У заголовочного файла .h есть файл .срр, где даны определения всех методов, что содержатся в .h файле.
0
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
15.07.2013, 19:08  [ТС] #4
0x10, если я правильно понимаю, то определение - это собственно тело функции, а объявление/прототип - это только ее название, с указанием типов параметров. И объявление содержится в .hpp, а определение - в основной программе. Так?

Добавлено через 48 секунд
Kins, тот .cpp, о котором вы говорите - это основная программа, или это еще что-то?
0
0x10
2478 / 1651 / 247
Регистрация: 24.11.2012
Сообщений: 4,087
15.07.2013, 19:10 #5
Цитата Сообщение от Керра Посмотреть сообщение
если я правильно понимаю, то определение - это собственно тело функции
Если прикапываться к формулировкам, то не тело само по себе, а заголовок+тело вместе.

Цитата Сообщение от Керра Посмотреть сообщение
И объявление содержится в .hpp, а определение - в основной программе. Так?
Угу.
0
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
15.07.2013, 19:13  [ТС] #6
Цитата Сообщение от 0x10 Посмотреть сообщение
не тело само по себе, а заголовок+тело вместе
Ну я это и имела в виду

То есть получается, что это просто для того, чтобы было удобно смотреть, и все?
0
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:13 #7
Цитата Сообщение от Керра Посмотреть сообщение
Kins, тот .cpp, о котором вы говорите - это основная программа, или это еще что-то?
нет, не основная- пример mscons.h - содержит объявления, mscons.cpp- содержит определения. Сама программа например prog.cpp включает в себя #include "mscons.h"
1
0x10
2478 / 1651 / 247
Регистрация: 24.11.2012
Сообщений: 4,087
15.07.2013, 19:16 #8
Цитата Сообщение от Керра Посмотреть сообщение
То есть получается, что это просто для того, чтобы было удобно смотреть, и все?
Назначение вполне практическое: заголовочный файл предоставляет клиенту необходимые определения для использования в своем коде.
0
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
15.07.2013, 19:19  [ТС] #9
Kins, так. вот у этих mscons различаются только расширения, то есть этот заголовочный файл "понимает", что тот .cpp относится к нему, и когда я его включаю в основную программу, включаются и те определения, которые находятся в mscons.cpp. Вроде наконец-то понятно))
0
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:21 #10
Цитата Сообщение от Керра Посмотреть сообщение
Вроде наконец-то понятно))
в файле mscons.cpp тоже есть #include "mscons.h"
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
15.07.2013, 19:23 #11
Керра, так же раздельная компиляция. Каждый .cpp компилируется отдельно. Если запихать всё в хэдеры, то после препроцессирования получится один большой .cpp, и при любом изменении придётся перекомпилировать всё.
1
0x10
2478 / 1651 / 247
Регистрация: 24.11.2012
Сообщений: 4,087
15.07.2013, 19:23 #12
Цитата Сообщение от Керра Посмотреть сообщение
заголовочный файл "понимает", что тот .cpp относится к нему, и когда я его включаю в основную программу, включаются и те определения, которые находятся в mscons.cpp
Нет, все предельно тупо и просто.
Подключение заголовочного файла на уровне текста производит подстановку его содержимого. Далее *.cpp файлы компилируются по отдельности, на выходе получаются объектные файлы. Определения функций тут еще не нужны. И только потом когда объектные модули компонуются в окончательную сборку (пусть исполняемый файл) - происходит связывание и разрешение ссылок те же функции.
2
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
15.07.2013, 19:23  [ТС] #13
Kins, ага. Ясненько, сейчас попробуем)
0
0x10
2478 / 1651 / 247
Регистрация: 24.11.2012
Сообщений: 4,087
15.07.2013, 19:24 #14
Цитата Сообщение от gray_fox Посмотреть сообщение
то после препроцессирования получится один большой .cpp
Фиг с ним, с размером. Важнее проблема возникновения множества определений функций в разных объектных модулях.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
15.07.2013, 19:25 #15
Цитата Сообщение от 0x10 Посмотреть сообщение
Важнее проблема возникновения множества определений функций в разных объектных модулях.
Ну так объектный модуль то один будет)
0
15.07.2013, 19:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2013, 19:25
Привет! Вот еще темы с ответами:

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

Отличие заголовочных файлов - C++
чем отличается string.h cstring string

Объявление заголовочных файлов - C++
Скажите в чем разница между объявлением вида: #include <iostream> и вида #include "iostream"

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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