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

Создание классов в С++. Раздельная компиляция - C++

Восстановить пароль Регистрация
 
Sparrow44
25 / 25 / 1
Регистрация: 20.02.2012
Сообщений: 349
08.05.2014, 20:14     Создание классов в С++. Раздельная компиляция #1
При создании класса C++ в VS создается два файла, "<имя_класса>.h" и "<имя_класса>.cpp", зачем они ? В каком сам класс писать? Простите за глупый вопрос, но только начал разбираться и вот сразу такой момент в моей книге про это не слова :-) Даже странно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2014, 20:14     Создание классов в С++. Раздельная компиляция
Посмотрите здесь:

C++ Первая раздельная компиляция. Подскажите ошибки.
Раздельная компиляция ошибка LNK2019 C++
C++ Раздельная компиляция
Раздельная компиляция файлов C++
раздельная компиляция C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Melg
418 / 154 / 62
Регистрация: 23.09.2013
Сообщений: 306
08.05.2014, 20:33     Создание классов в С++. Раздельная компиляция #2
Поговорим о единицах трансляции Каждый раз когда ваш VS компилирует проект он обрабатывает набор переданных ему .cpp файлов - эти файлы содержат исходный код реализации (определения методов/классов/функций/переменных) Данные файлы посредством компиляции преобразуются в .o - объектные файлы, содержащие машинный код. Каждый из .cpp файлов может компилироваться как самостоятельная единица. Но как же быть, когда в одном .cpp файле нужно вызвать функцию из другого .cpp файла - тут то на помощь и приходят .h файлы - В них содержится код объявлений (объявления методов/функций/переменных). Каждый раз, когда программист хочет использовать некоторую фукнцию более одного раза, он во-первых, помещает определение функции в .cpp файл, а объявление - в .h - файл, во-вторых, во всех .cpp файлах, где необходимо использовать функцию он добавляет директиву препроцессора #include "somefilewithourfoo.h". Препроцессор обрабатывает исходные коды в .cpp файлах еще до компилятора - просто как текст, он заменяет директиву - всем содержимым .h файла. За счет этого гарантируется, что в двух разных .cpp файлах будет содержаться одинаковое объявление классов/функций/методов. Возвращаясь к вопросу компиляции - когда отдельные .o файлы получены, осталось соединить всё вместе - для этого существует линковщик. Если в коде программы находится вызов функции, определение которой не дано в той же единице трансляции (том-же .cpp файле) - то вместо него используется заглушка, которая должна быть заменена линковщиком - на смещение - после нахождение определения этой функции - в другой единице трансляции. Для линковщика какраз и важно совпадение объявлений и определений функций - если таковое не найдено - будет выдана ошибка линковки и собрать программу до конца не удастся. < - Это, быть может слегка сумбурно - на тему "зачем они". А в целом - в .h нужно писать объявления классов (имя класса, объявления публичных и приватных метдов, полей и т.д.) в .cpp файле нужно писать определения конкретных методов, полей и т.д. - В конечном счете компилируются только .cpp файлы, а .h - включаются в них при помощи препроцессора.
Если нормально воспринимаете материал в лекционном формате, советую посмотреть http://www.youtube.com/watch?v=2uZlh7ZmOiM - какраз рассматривается подробно программа состоящая из нескольких файлов, и как вообще устроен процесс преобразования исходных кодов понятных человеку, в машинные коды.
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,921
08.05.2014, 20:39     Создание классов в С++. Раздельная компиляция #3
Sparrow44, для начала можете вообще .h файлы не создавать,пишите как раньше в main.cpp вместе с классами
Sparrow44
25 / 25 / 1
Регистрация: 20.02.2012
Сообщений: 349
08.05.2014, 21:12  [ТС]     Создание классов в С++. Раздельная компиляция #4
Цитата Сообщение от S_el Посмотреть сообщение
для начала можете вообще .h файлы не создавать,пишите как раньше в main.cpp вместе с классами
Лучше сразу привыкать писать правильно :-) Чем писать просто, но не правильно.
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,921
08.05.2014, 21:26     Создание классов в С++. Раздельная компиляция #5
Sparrow44, а кто сказал что так писать не правильно?
Sparrow44
25 / 25 / 1
Регистрация: 20.02.2012
Сообщений: 349
08.05.2014, 23:22  [ТС]     Создание классов в С++. Раздельная компиляция #6
Цитата Сообщение от S_el Посмотреть сообщение
а кто сказал что так писать не правильно?
Просто , на мой взгляд, если классы выделять в отдельные файлы, то такая программа легче читается и понимается. Нас так в универе учили по крайне мере.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2014, 23:27     Создание классов в С++. Раздельная компиляция
Еще ссылки по теме:

Раздельная компиляция и шаблоны C++
C++ Раздельная компиляция
Раздельная компиляция C++

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

Или воспользуйтесь поиском по форуму:
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,921
08.05.2014, 23:27     Создание классов в С++. Раздельная компиляция #7
Sparrow44, зависит от объема программы
А вообще для этого и сделали,чтобы не нагромождать все в 1 файл.
Yandex
Объявления
08.05.2014, 23:27     Создание классов в С++. Раздельная компиляция
Ответ Создать тему
Опции темы

Текущее время: 11:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru