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

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

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

Осваиваю раздел одной книги "Отделение интерфейса класса от реализации". То что получилось можно и нужно скачать по адресу (Проект VS9).
GradeBook.h - заголовочный файл с определением класса.
Gradecook.cpp - файл исходников с определением элемент функций класса.
main.cpp - файл исходников, в котором находится ф-я int main().
Интересуют именно строки директив препроцессора
Код
[main.cpp] #include "Gradebook.h"
[GradeBook.cpp] #include "Gradebook.h"
Как ни странно, но при таком раскладе приложение работает.
Собственно прошу многоуважаемое сообщество объяснить, от куда компилятор знает о существовании файла GradeBook.cpp? Я почему-то не вижу здесь логики. Основываясь на своем опыте программирование на php, логичнее было бы написать так, чтобы инклудились бы все три файла.
Код
[main.cpp] #include "Gradebook.h"
[GradeBook.h] #include "Gradebook.cpp"
Очень надеюсь что кто-то поможет мне разобраться в таком вопросе. Может он и не столь важен, но для дальнейшего прогресса мне просто необходимо это понять.
PS Это учебный пример из книги Дейтейла Как программировать на С++
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2010, 10:43
Ответы с готовыми решениями:

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

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

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

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

5
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
23.01.2010, 11:07 2
h файлы инклудятся в cpp, но не наоборот.
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.01.2010, 12:16 3
Не знаю, как точно это реализовано в VS, но предполагаю, что как-то так:
Gradecook.cpp подключает Gradecook.h. VS просто компилирует .cpp файлы в объектники. А так как, в нашем спп реализация методов класса линкер потом резолвит символьную таблицу подключая эти методы.
В консоли может примерно так:
Код
[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
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.01.2010, 13:58 4
molfar:
Если ты не знаешь что такое раздельная компиляция то это плохо.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3
23.01.2010, 14:05  [ТС] 5
Цитата Сообщение от Genius Ignat Посмотреть сообщение
molfar:
Если ты не знаешь что такое раздельная компиляция то это плохо.
Еще не знаю, потому и задаю вопросы и пытаюсь понять.
0
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
23.01.2010, 14:09 6
Vourhey:
Хороший ответ да, объяснять вроде бы больше и не чего.

molfar:
Добавлено через 1 минуту
А что книг по C++ не нашёл.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2010, 14:09

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

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

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

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


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

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

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