27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
1

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

08.05.2014, 20:14. Показов 2411. Ответов 6
Метки нет (Все метки)

При создании класса C++ в VS создается два файла, "<имя_класса>.h" и "<имя_класса>.cpp", зачем они ? В каком сам класс писать? Простите за глупый вопрос, но только начал разбираться и вот сразу такой момент в моей книге про это не слова :-) Даже странно.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2014, 20:14
Ответы с готовыми решениями:

Раздельная компиляция шаблонов классов
При разделении шаблона класса на .h и .cpp линковщик ругается. Неужели в C++17 ещё не пофиксили это...

Раздельная компиляция шаблонных классов
Пытаюсь сделать класс, который определяет вектор. И содержит методы для работы с ними. Выдаёт...

Раздельная компиляция
В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не нашел. Вопросы вот...

Раздельная компиляция
Здравствуйте, я перечитал на форуме информацию по этой теме, но пока что не сумел разобраться. У...

6
541 / 162 / 79
Регистрация: 23.09.2013
Сообщений: 316
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 - какраз рассматривается подробно программа состоящая из нескольких файлов, и как вообще устроен процесс преобразования исходных кодов понятных человеку, в машинные коды.
2
2430 / 1830 / 404
Регистрация: 15.12.2013
Сообщений: 8,086
08.05.2014, 20:39 3
Sparrow44, для начала можете вообще .h файлы не создавать,пишите как раньше в main.cpp вместе с классами
0
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
08.05.2014, 21:12  [ТС] 4
Цитата Сообщение от S_el Посмотреть сообщение
для начала можете вообще .h файлы не создавать,пишите как раньше в main.cpp вместе с классами
Лучше сразу привыкать писать правильно :-) Чем писать просто, но не правильно.
0
2430 / 1830 / 404
Регистрация: 15.12.2013
Сообщений: 8,086
08.05.2014, 21:26 5
Sparrow44, а кто сказал что так писать не правильно?
0
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
08.05.2014, 23:22  [ТС] 6
Цитата Сообщение от S_el Посмотреть сообщение
а кто сказал что так писать не правильно?
Просто , на мой взгляд, если классы выделять в отдельные файлы, то такая программа легче читается и понимается. Нас так в универе учили по крайне мере.
0
2430 / 1830 / 404
Регистрация: 15.12.2013
Сообщений: 8,086
08.05.2014, 23:27 7
Sparrow44, зависит от объема программы
А вообще для этого и сделали,чтобы не нагромождать все в 1 файл.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2014, 23:27
Помогаю со студенческими работами здесь

Раздельная компиляция
Пусть есть программа, которая состоит из 2 файлов. 1 файл: основной, там где main 2 файл:...

раздельная компиляция
Вот есть три файла: заголовочный файл с классом (.h), файл с реализацией методов класса (.cpp), и...

Шаблоны и раздельная компиляция
Здравствуйте! Если просто я пишу класс, например: class Test { private: int *pm; ...

Раздельная компиляция и шаблоны
Есть 3 файла с кодом: 1) foo.hpp template&lt;typename T&gt; class foo { public: T bar; foo();...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru