Пока я читал принятый ответ этот вопрос, у меня был следующий вопрос:
Как правило, методы определяются в файлах заголовков (.hpp
или что-то еще) и реализации в исходных файлах (.cpp
или что-то еще).
Одной из основных причин, по которым некорректная практика когда-либо включать "исходный файл" (#include <source_file.cpp>
), заключается в том, что реализация его методов затем будет дублироваться, что приведет к связыванию ошибок.
Когда вы пишете:
#ifndef BRITNEYSPEARS_HPP
#define BRITNEYSPEARS_HPP
class BritneySpears
{
public:
BritneySpears() {}; // Here the constructor has implementation.
};
#endif /* BRITNEYSPEARS_HPP */
Он дает реализацию конструктора (здесь "пустая" реализация, но все же).
Но почему тогда, включая этот заголовочный файл несколько раз (ака. на разные исходные файлы), будет не генерировать ошибку "повторного определения" во время ссылки?