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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
molfar
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3
#1

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

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

Осваиваю раздел одной книги "Отделение интерфейса класса от реализации". То что получилось можно и нужно скачать по адресу http://************.com/files/sd0dbt0bs (Проект 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 Это учебный пример из книги Дейтейла Как программировать на С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2010, 10:43     Отделение интерфейса класса от реализации
Посмотрите здесь:

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

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

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

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

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

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

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

Трудности в реализации класса - C++
Не могу понять, почему не работают конструкторы класса... Прошу понятного объяснения=) вот код 1 файл #ifndef ___MAS #define ___MAS...

Спрятать часть интерфейса класса - C++
Добрый вечер, как предоставить возможность только классу Initer создавать и инициализировать класс A и не иметь в интерфейсе А лишних...

код реализации класса вектор - C++
привет!!!!!!! поделитесь пожалусто кодом реализации класса вектор!!!!!! пожалусто........ нужно к завтрашнему(((99:help::'(

Идеи реализации класса Menu - C++
Добрый день. В общем хочу разработать шаблонный класс Menu, чтобы постоянно не писать switch{}, но не знаю, как лучше сделать, суть в том,...

Детали реализации конструктора класса - C++
Есть конструктор условного класса картинки и я не совсем понимаю нескольких вещей: #include <iostream> #include <fstream> ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
23.01.2010, 11:07     Отделение интерфейса класса от реализации #2
h файлы инклудятся в cpp, но не наоборот.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
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 можно записать.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
23.01.2010, 13:58     Отделение интерфейса класса от реализации #4
molfar:
Если ты не знаешь что такое раздельная компиляция то это плохо.
molfar
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3
23.01.2010, 14:05  [ТС]     Отделение интерфейса класса от реализации #5
Цитата Сообщение от Genius Ignat Посмотреть сообщение
molfar:
Если ты не знаешь что такое раздельная компиляция то это плохо.
Еще не знаю, потому и задаю вопросы и пытаюсь понять.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
23.01.2010, 14:09     Отделение интерфейса класса от реализации #6
Vourhey:
Хороший ответ да, объяснять вроде бы больше и не чего.

molfar:
Добавлено через 1 минуту
А что книг по C++ не нашёл.
Yandex
Объявления
23.01.2010, 14:09     Отделение интерфейса класса от реализации
Ответ Создать тему
Опции темы

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