Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
1294 / 465 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
1

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

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

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

В общем, может я неправильно поняла: есть у меня "Моя программа.cpp", и есть "Заголовочный файл.hpp". В заголовочном файле прописаны прототипы функций, и классы без определения их методов, этот заголовочный файл включается в мою программу. Все определения содержатся, собственно, в моей программе.
Если это так, то я не понимаю, какой смысл выделять это в отдельный файл, если можно прописать то же самое в самом начале. Просто чтобы был отдельный список, и не надо было скакать вверх-вниз, если надо вспомнить какие параметры нужно передать в функцию?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2013, 19:03
Ответы с готовыми решениями:

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

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

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

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

35
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
15.07.2013, 19:05 2
Керра, если все определения разместить в заголовочном файле, затем его подключить в несколько cpp, то при сборке программы будет ошибка из-за множества определений функций. Объявлений может быть сколько угодно, определение - одно.
0
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:06 3
У заголовочного файла .h есть файл .срр, где даны определения всех методов, что содержатся в .h файле.
0
1294 / 465 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
15.07.2013, 19:08  [ТС] 4
0x10, если я правильно понимаю, то определение - это собственно тело функции, а объявление/прототип - это только ее название, с указанием типов параметров. И объявление содержится в .hpp, а определение - в основной программе. Так?

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

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

То есть получается, что это просто для того, чтобы было удобно смотреть, и все?
0
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:13 7
Цитата Сообщение от Керра Посмотреть сообщение
Kins, тот .cpp, о котором вы говорите - это основная программа, или это еще что-то?
нет, не основная- пример mscons.h - содержит объявления, mscons.cpp- содержит определения. Сама программа например prog.cpp включает в себя #include "mscons.h"
1
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
15.07.2013, 19:16 8
Цитата Сообщение от Керра Посмотреть сообщение
То есть получается, что это просто для того, чтобы было удобно смотреть, и все?
Назначение вполне практическое: заголовочный файл предоставляет клиенту необходимые определения для использования в своем коде.
0
1294 / 465 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
15.07.2013, 19:19  [ТС] 9
Kins, так. вот у этих mscons различаются только расширения, то есть этот заголовочный файл "понимает", что тот .cpp относится к нему, и когда я его включаю в основную программу, включаются и те определения, которые находятся в mscons.cpp. Вроде наконец-то понятно))
0
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:21 10
Цитата Сообщение от Керра Посмотреть сообщение
Вроде наконец-то понятно))
в файле mscons.cpp тоже есть #include "mscons.h"
1
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
15.07.2013, 19:23 11
Керра, так же раздельная компиляция. Каждый .cpp компилируется отдельно. Если запихать всё в хэдеры, то после препроцессирования получится один большой .cpp, и при любом изменении придётся перекомпилировать всё.
1
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
15.07.2013, 19:23 12
Цитата Сообщение от Керра Посмотреть сообщение
заголовочный файл "понимает", что тот .cpp относится к нему, и когда я его включаю в основную программу, включаются и те определения, которые находятся в mscons.cpp
Нет, все предельно тупо и просто.
Подключение заголовочного файла на уровне текста производит подстановку его содержимого. Далее *.cpp файлы компилируются по отдельности, на выходе получаются объектные файлы. Определения функций тут еще не нужны. И только потом когда объектные модули компонуются в окончательную сборку (пусть исполняемый файл) - происходит связывание и разрешение ссылок те же функции.
2
1294 / 465 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
15.07.2013, 19:23  [ТС] 13
Kins, ага. Ясненько, сейчас попробуем)
0
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
15.07.2013, 19:24 14
Цитата Сообщение от gray_fox Посмотреть сообщение
то после препроцессирования получится один большой .cpp
Фиг с ним, с размером. Важнее проблема возникновения множества определений функций в разных объектных модулях.
0
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
15.07.2013, 19:25 15
Цитата Сообщение от 0x10 Посмотреть сообщение
Важнее проблема возникновения множества определений функций в разных объектных модулях.
Ну так объектный модуль то один будет)
0
1294 / 465 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
15.07.2013, 19:27  [ТС] 16
0x10, и что с этим множеством определений делать? Кстати, а что делает #pragma once?
0
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
15.07.2013, 19:27 17
Цитата Сообщение от gray_fox Посмотреть сообщение
Ну так объектный модуль то один будет)
А, прям настолько все в кучу спихать...

Цитата Сообщение от gray_fox Посмотреть сообщение
+ есть inline
Помним, но пока не принципиально.
0
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
15.07.2013, 19:28 18
Цитата Сообщение от Керра Посмотреть сообщение
то с этим множеством определений делать?
Не создавать множество определений, только одно.
0
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
15.07.2013, 19:29 19
Керра, определение должно быть одно. Иначе будет ошибка линковки.

pragma once предотвращает множественное включение одного файла.
1
1294 / 465 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
15.07.2013, 19:31  [ТС] 20
Спасибо большое
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2013, 19:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подключение заголовочных файлов
Как работает подключение заголовчных файлов в Линукс во время компиляции? К примеру имею свой...

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

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

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


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

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

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