Ни. В C и C ++ вы можете объявлять что-то много раз, говоря, что есть код для этой функции, но это где-то еще. Вы можете определить только один раз, и в том месте, где вы его определили, именно там генерируется код, в этом файле obj. Итак, у вас есть три файла .cpp и один заголовок: первый файл определяет класс, а два других составляют его объекты. Файлы obj для двух других файлов не будут содержать никакого кода для класса, только некоторая информация, достаточная для того, чтобы компоновщик вставил вызовы к коду, является целью определяющего файла.
Если вы определяете класс в двух местах, неявно помещая определения методов в заголовок, включенный в несколько файлов, компоновщик не будет возражать, поскольку определения «одинаковы», они просто появляются в каждом объекте изначально и окончательное приложение будет включать только одну из сгенерированных функций по умолчанию.
Вы всегда можете создать столько экземпляров класса, сколько захотите, и код метода никогда не копируется. Он существует в одном месте для всех различных файлов, функций и т. Д., Чтобы использовать и создавать объекты этого класса.
Некоторые конструкторы по умолчанию могут быть умными и требовать некоторого кода, некоторые для структур POD, например, могут быть полностью оптимизированы и не нуждаются в каком-либо коде. Однако всегда случается так, что создание большего количества экземпляров не копирует никакие функции, включая конструкторы.