C/C++

Глупые вопросы по поводу c++

в чем разница между cpp и hpp файлами?
если я два раза сделаю include из разных мест не будет ли код скомпилирован дважды?
как мне внутри файла сделать подключить другой файл, но чтоб для тех файлов которые подключат этот файл тот файл не был доступен?
как мне сделать так чтобы из файла были доступны только определенные классы и только определенные методы?
Пошли по порядку:
>в чем разница между cpp и hpp файлами?
HPP - это файл-заголовок, в котором пишутся объявления всевозможных типов данных, которые используются потом в CPP файле. Для этого используется директива #include. Фактически, файл вставляется в то место, где написан #include <имя_файла>

>если я два раза сделаю include из разных мест не будет ли код скомпилирован дважды?
Да, так и произойдёт.

>как мне внутри файла сделать подключить другой файл, но чтоб для тех файлов которые подключат этот файл тот файл не был доступен?
Вопрос не понятен. Если файл с помощью #include подцеплен, то его содержимое тупо вставляется ровно в то место. Существуют определения условной компиляции, #ifdef, #ifndef - прочитайте про них. С их помощью можно куски кода делать невидимыми для компилятора
>как мне сделать так чтобы из файла были доступны только определенные классы и только определенные методы?
С помощью #ifdef. Например:
#define AAA //если этот дефайн убрать, то кусок кода внутри #ifdef - #endif будет невидим для компилятора. Переменные, определённые с помощью #define будут видны после определения ниже по коду. Если надо, чтобы они были видны во всём проекте, то их надо определять в make (или cmake) файле.
...
#ifdef AAA
///кусок кода
#endif
АМ
Александр Миронов
21 953
Лучший ответ
Разница сугубо символическая и удобоваримая, договорено что в cpp пишется основная часть программы, в h(hpp) - заголовочная часть. Что-то вроде оглавления в книге. Если название совпадает, то компилятор ищет заголовки в h а их реализацию в соответствующем ему cpp файле. Можно в одном файле hpp писать и заголовки и их определения.
К примеру заказчик присылает заголовочный файл с описанием что ему нужно, а вы пишете реализацию в cpp файле. Если вам не нужна какая либо функция, достаточно закомментировать ее название в hpp, вместо того чтобы убирать много кода.
Когда все поставлено на поток - эту подтасовку что где убрать, а что оставить делают с помощью препроцессорной обработки #define #if #else и т.п.
Juri Sultangarejev
Juri Sultangarejev
51 416
да. глупый. иди учи уроки. не твоё если читать документацию не умеешь
Xurshidbek Abdurahmonov
Xurshidbek Abdurahmonov
24 151