На днях один пользователь прокомментировал another question of mine: «Все, что вы называете декларациями в вашем коде, - это фактически определения». Я решил потратить некоторое время, чтобы понять разницу между обеими концепциями.Правильно ли определять классы в файлах заголовков?
Учитывая код ниже:
test.hpp
class Test
public:
Test();
};
test.cpp
#include "test.hpp"
Test::Test()
{
// code
}
main.cpp
#include "test.hpp"
int main()
{
Teste objTest = Test();
return 0;
}
Вопрос 1: Из моего понимания, заголовочный файл test.hppопределяет класс с именем Test
(на основе this answer). Это верно?
Вопрос 2: Мой код основан на общие практиках (я видел несколько библиотек с открытым исходным кодом следующих этой моделью), который, кажется, против правила "заголовков должны содержать только объявления, все определения должны быть в .cpp-файле ". Но приемлемо ли это? Если нет, как точно следует написать декларации/определения классов должным образом?
* «... это противоречит правилу» заголовки должны содержать только декларации; все определения должны быть в .cpp файле "* - Это относится к ** объектам ** и ** функциям **. (public) Классы должны быть определены в заголовочных файлах. Как и * templates * и * inlines *. – Galik