2017-02-17 24 views
0

Мне поручено реализовать класс. Мне предоставлен файл .h с названием «pro.h», который я никак не могу изменить. Файл .h содержит только прототипы функций, никаких определений. После блока класса, он имеетЗачем нужен файл .hpp в файле .h?

#include "pro.hpp" 

Я должен создать file.hpp добавить определения, хотя, я смущен, потому что определения, как правило, включены в .cpp файл не другой файл заголовка. Почему вы думаете, что это будет сделано? И я буду форматировать определения так же, как это сделать в файле .cpp, или переписать заголовочный файл, чтобы включить определения (что казалось бы неэффективным).

+2

В файле '.h' нет ничего волшебного, файла' .hpp' или любого другого файла. Компилятор просто обрабатывает все файлы '# include', как указано. Расширения вашего файла могут быть '.h',' .hpp', '.xyz' или' .hjgiurejkcxkj'. Он по-прежнему будет действительным C++, если файлы, о которых идет речь, после логического включения содержат допустимый код C++. –

+0

Спасибо, я просто хотел убедиться, что компиляторы не будут скомпилировать его по-другому из-за расширения. –

+0

@AlessandroLorusso Вы, как правило, не компилируете заголовочные файлы самостоятельно, поэтому проблем нет. –

ответ

1

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

Если вы новичок в шаблоны, просто спросите дядю google или муравей wiki;)

ADD:

Проще говоря ... если у вас есть что-то в foo.cpp, он переводится в двоичный файл, а соответствующий заголовок foo.hpp служит ссылкой на то, какие функции существуют в двоичном формате, который я мог бы использовать из моего другого кода. Важно то, что этот бинар больше не меняется (действительно).

С другой стороны, шаблоны не могут быть преобразованы в двоичный файл, пока вы не знаете, какой тип он будет работать на ... Если вы используете класс шаблона один раз int и в другой раз с vector<double> для параметра шаблона , результирующий двоичный файл может быть очень разным ... Поэтому вы можете только скомпилировать код в двоичный файл, как только вы знаете тип, и поэтому вам нужно передать код (внутри заголовка), а не только прототипы функций ...

Надеюсь, это ясно. Это ведь почти 3 часа ночи здесь.

Если нет, this должен быть очень полным.

+0

Это очень помогло, спасибо –

Смежные вопросы