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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 427
#1

Для чего нужны заголовочные файлы? - C++

05.02.2013, 17:36. Просмотров 4570. Ответов 9
Метки нет (Все метки)

Ещё раз всем здрасьте , последний вопрос в котором я не могу разобраться - Для чего нужны заголовочные файлы ???
Для чего нужны эти файлы .h объясните мне на русском языке а не на теоретическом !!!
Ну и пример что бы до конца понел , спасибо заранее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2013, 17:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Для чего нужны заголовочные файлы? (C++):

Для чего нужны файлы с расширением .h, .c? - C++
Не подскажите, для чего нужен (.h) и (.c) файл? А (.cpp)? Я читал, что это заголовочный файл, но за зачем он нужен?

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

Работа в Visual Studio 2015 - как добавить файлы исходного кода и заголовочные файлы? - C++
Приветствую всех! Столкнулся с тем, что решая задачи по книге Лафоре про графику, не смог добавить файлы .h и .cpp, скачав их с одной из...

Для чего нужны интерфейсы? - C++
Объясните на пальцах для чего нужны интерфейсы, как я понял они описывают методы и свойства, которые при наследовании классами должны были...

Для чего нужны указатели? - C++
Кто может объяснить для чего нужны указатели и смысл их? в интернете одна муть и еще для чего нужно new delete

Для чего нужны битовые операции? - C++
Здравствуйте. Дошел в книге Стенли до битовых операций, но никак не могу понять их предназначение. Где вообще они используются и как с...

9
MrGluck
Модератор
Эксперт CЭксперт С++
7788 / 4824 / 750
Регистрация: 29.11.2010
Сообщений: 13,182
05.02.2013, 17:48 #2
Представьте, что вы написали программу в миллион строк кода. А потом оказалось, что туда надо внести малюсенькие изменения, для начала вам надо в этих миллион строках как то сориентироваться, ну да ладно, вы же не лыком шиты, вы компьютерщик со стажем, Ctrl + F, усмехаетесь вы. Ну и через несколько итераций поиска вы все же находите нужную вам часть, потом понимаете, что она то функционирует нормально, вы снова набираете Ctrl + F и ищите другую часть и так долго-долго.
Но далее. Вы нашли наконец причину ошибки и исправили её. Представьте, сколько будет длиться компиляция всего файла? А если с первого раза ошибку не удалось искоренить, идем в начало?
Часто программисты отделяют части кода, которые можно использовать потом повторно, просто включив их, или просто разъединяя все по логическим маленьким кирпичикам, чтобы было легче потом ориентироваться, или разделяют код, чтобы компиляция шла не по несколько часов. Ведь при изменении лишь .h файла мы не будем трогать весь большой проект.
Надеюсь, аргументы показались вам достаточно вескими.
0
BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 427
05.02.2013, 18:02  [ТС] #3
А можно пример кодом ещё ? : D
в основном понел , только как применять не совсем понел , напиши мне мини код как применять и всё будет ок , спасибо большое!
0
MrGluck
Модератор
Эксперт CЭксперт С++
7788 / 4824 / 750
Регистрация: 29.11.2010
Сообщений: 13,182
05.02.2013, 18:14 #4
Например вот:
SuperClass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef _SUPER_C_ // инклюд нварды чтобы хедер не включился 2 раза в проект
#define _SUPER_C_
 
 
// описываем лишь интерфейс, без реализации
 
class Putin
{
    public:
        // ...
        void destroyHouse();
        // ...
};
 
#endif
SuperClass.cpp
C++
1
2
3
4
5
6
7
8
// данный файл содержит реализацию методов из файла SuperClass.h
#include <iostream>
#include "SuperClass.h"
 
void Putin::destroyHouse()
{
    std::cout << "Bang bang!!!\a\n";
}
main.cpp
C++
1
2
3
4
5
6
7
8
#include "SuperClass.h"
 
 
int main()
{
    Putin p;
    p.destroyHouse();
}
Мы описываем класс в отдельных файлах. В одном объявляем интерфейс, в другом реализуем его, т.о. повышается удобство работы.
2
BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 427
05.02.2013, 18:48  [ТС] #5
Ооооо , огромное спасибо , понел , ваще респект , ещё раз спасибо
0
Rem_
24 / 24 / 3
Регистрация: 05.02.2013
Сообщений: 245
Записей в блоге: 8
05.02.2013, 18:48 #6
По русски.
Вместо строчки #include "xxxxx.h" препроцессор вставляет текст из файла xxxxx.h
1
0x10
2548 / 1728 / 264
Регистрация: 24.11.2012
Сообщений: 4,349
05.02.2013, 18:52 #7
MrGluck, Это назначение не только заголовочных файлов, но разбиения проекта на файлы в принципе.

Гораздо более серьезная мотивация - необходимость линковаться со сторонними библиотеками. Для этого нужна сама библиотека и чтобы ее использовать - объявления сущностей, реализованных в ней. Теоретически такие объявления можно написать и руками, что само по себе глупо. Поэтому разработчик библиотеки может предоставить только саму сборку и заголовочные файлы, которые по сути объявляют интерфейс библиотеки.
1
Святогор
6 / 6 / 2
Регистрация: 27.06.2016
Сообщений: 54
16.01.2017, 00:50 #8
Я правильно понял? Заголовочный файл содержит всякого рода прототипы структур классов но никаких кземпляров?
Потом во втором файле предложено хранить экземпляры классов и структур а также функции а в третьем файле главная функция мейн которая все это запускает?

И в том ли смысл что всеэти файлы можно отдельно компилировать?
0
Renji
2113 / 1472 / 346
Регистрация: 05.06.2014
Сообщений: 4,265
16.01.2017, 09:06 #9
Цитата Сообщение от Святогор Посмотреть сообщение
Я правильно понял? Заголовочный файл содержит всякого рода прототипы структур классов но никаких кземпляров?
Не совсем. Например, можно туда закинуть тело inline функции.
Цитата Сообщение от Святогор Посмотреть сообщение
И в том ли смысл что всеэти файлы можно отдельно компилировать?
Смысл в том что все эти файлы нужно компилировать отдельно, ничего не зная о содержании остальных файлов. Поэтому, обычные функции в h кидать нельзя - каждый cpp файл попытается скомпилировать свою копию функции (он же не знает что у соседа уже скомпилировано) и будет ненужное дублирование кода. А inline можно, так как inline и означает что код функции просто втыкается во все места из которых он вызван. Вышло 100500 копий? Just as planned.

Вообще говоря, все это очевидные рудименты времен когда компьютеры были большие, а память маленькой. Но у разработчиков похоже никак не дойдут руки перепилить все под современные реалии. При том что ключи компилятора включающие глобальную оптимизацию и компилирующие все cpp разом давно есть.
0
Святогор
6 / 6 / 2
Регистрация: 27.06.2016
Сообщений: 54
16.01.2017, 15:21 #10
Согласен. В современном программировании много рудиментов. И сами языки и среды программирования отличаются совершенно зверинной недружелюбностью динозавров а синтаксис так вообще одна сплошная подстава.
Меня забавляют всяческие мнемокоды при терабайтных пространствах уже пора полностью писать названия операторов чтобы без хелпов все было понятно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2017, 15:21
Привет! Вот еще темы с ответами:

Для чего нужны вложенные структуры? - C++
Скажите пожалуйста для чего нужны вложенные структуры и где их используют?

Для чего нужны указатели на функции? - C++
для чего нужны эти указатели на функции... не проще ли вызвать саму функцию, чем заводить под нее указатель и им пользоваться...

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

для чего нужны хеш таблицы? - C++
для чего нужны хеш таблицы? если есть массивы )


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

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

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