С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3

Отделение интерфейса класса от реализации

23.01.2010, 10:43. Показов 2394. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Осваиваю раздел одной книги "Отделение интерфейса класса от реализации". То что получилось можно и нужно скачать по адресу (Проект VS9).
GradeBook.h - заголовочный файл с определением класса.
Gradecook.cpp - файл исходников с определением элемент функций класса.
main.cpp - файл исходников, в котором находится ф-я int main().
Интересуют именно строки директив препроцессора
Code
1
2
[main.cpp] #include "Gradebook.h"
[GradeBook.cpp] #include "Gradebook.h"
Как ни странно, но при таком раскладе приложение работает.
Собственно прошу многоуважаемое сообщество объяснить, от куда компилятор знает о существовании файла GradeBook.cpp? Я почему-то не вижу здесь логики. Основываясь на своем опыте программирование на php, логичнее было бы написать так, чтобы инклудились бы все три файла.
Code
1
2
[main.cpp] #include "Gradebook.h"
[GradeBook.h] #include "Gradebook.cpp"
Очень надеюсь что кто-то поможет мне разобраться в таком вопросе. Может он и не столь важен, но для дальнейшего прогресса мне просто необходимо это понять.
PS Это учебный пример из книги Дейтейла Как программировать на С++
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2010, 10:43
Ответы с готовыми решениями:

Отделение интерфейса от реализации класса: компиляция кода реализации
Доброго времени суток, У меня возникла проблема с отделением интерфейса от реализации класса. Допустим, у меня есть три файла: 1....

Отделение интерфейса класса от его реализации
Всем привет! Прочитал все найденные похоже темы, но ответа на свой вопрос я не нашел. Поэтому создаю тему... Хочу отделить интерфейс...

Отделение интерфейса от реализации
Доброго времени суток! Имеется вопрос по теме, обозначенной в заголовке. Предположим, я разрабатываю класс. Я создаю два файла:...

5
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
23.01.2010, 11:07
h файлы инклудятся в cpp, но не наоборот.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.01.2010, 12:16
Не знаю, как точно это реализовано в VS, но предполагаю, что как-то так:
Gradecook.cpp подключает Gradecook.h. VS просто компилирует .cpp файлы в объектники. А так как, в нашем спп реализация методов класса линкер потом резолвит символьную таблицу подключая эти методы.
В консоли может примерно так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Vourhey@localhost two]$ ll
total 20
-rwxrwxr-x. 1 Vourhey Vourhey 5399 2010-01-23 12:04 main
-rw-rw-r--. 1 Vourhey Vourhey   71 2010-01-23 11:22 main.cpp   использование класса
-rw-rw-r--. 1 Vourhey Vourhey   57 2010-01-23 11:03 one.cpp     реализация методов класса one
-rw-rw-r--. 1 Vourhey Vourhey   55 2010-01-23 11:13 one.h         объявление класса one
[Vourhey@localhost two]$ rm -f main 
[Vourhey@localhost two]$ 
[Vourhey@localhost two]$ 
[Vourhey@localhost two]$ g++ -I./ main.cpp -o main    //будет ошибка, так как символы не найдены
/tmp/ccFPZKT7.o: In function `main':
main.cpp:(.text+0x11): undefined reference to `one::one()'
main.cpp:(.text+0x1d): undefined reference to `one::two()'
collect2: ld returned 1 exit status
[Vourhey@localhost two]$ g++ -c -I./ one.cpp
[Vourhey@localhost two]$ g++ -I./ main.cpp -o main one.o     //отдаем ему объектник скомпиленый из класса
Достаточно знать, что методы есть, а во время линковки они подхватятся. Либо будет ошибка линкера По файлам проекта VS не составляет труда найти cpp-файл с реализацией методов класса. Если проект простой и у классов реализации не связано, то без разницы, где методы реализуются - собери объектники, подсунь линкеру он сам все найдет. В противном случае еще нужно учитывать порядок передачи. Все это в Makefile можно записать.
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.01.2010, 13:58
molfar:
Если ты не знаешь что такое раздельная компиляция то это плохо.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3
23.01.2010, 14:05  [ТС]
Цитата Сообщение от Genius Ignat Посмотреть сообщение
molfar:
Если ты не знаешь что такое раздельная компиляция то это плохо.
Еще не знаю, потому и задаю вопросы и пытаюсь понять.
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.01.2010, 14:09
Vourhey:
Хороший ответ да, объяснять вроде бы больше и не чего.

molfar:
Добавлено через 1 минуту
А что книг по C++ не нашёл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.01.2010, 14:09
Помогаю со студенческими работами здесь

Отделение интерфейса от реализации
Сделала рабочую программу. Нужно разделить интерфейс от реализации. Делаю как написано: добавить в проект заголовочный файл *.h; ...

Класс, отделение интерфейса от реализации
Всем привет. Пытаюсь разделить интерфейс от реализации. вот исходный код: файл GradeBook.h #include <string> using...

Разделение интерфейса и реализации
Добрый день. Пытаюсь разделить проект, создал второй cpp и h файлы. Переменные объявлял в .h, были ошибки многократно определенного...

Отделение класса в отдельные файлы (заголовочный и исполняемый)
Добрый день! Появилась проблема с созданием класса в отдельный файл: точнее объявление в ".h"-файле, а определение в другом cpp...

Какие механизмы обеспечивают разделение интерфейса и реализации?
Добрый день! Не подскажите какие механизмы обеспечивают разделение интерфейса и реализации? Чем больше – тем лучше.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru