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

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

23.01.2010, 10:43. Показов 2398. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru