Пишем больше рефакторинга на C ++
В C ++ вам не нужно использовать заголовки вообще. Вы можете определить весь объект в одном файле так же, как в C # или Java. Разработчики C обычно хранят только внешние вызовы в заголовочном файле. Все внутренние вызовы будут определены в файле .c. Точно так же вы можете зарезервировать ваши файлы C ++ .h для классов / интерфейсов (чисто виртуальных абстрактных классов) / и т.д. которые предназначены для совместного использования за пределами DLL. Для внутренних классов / структур / интерфейсов и т. Д. Вы просто включите нужный файл .cpp:
#include<myclass.cpp>
Кажется, это не самый популярный подход, но это законный C ++. Это определенно будет возможность для всего вашего внутреннего кода. Это позволяет внутреннему коду и набору классов меняться более радикально, обеспечивая при этом более стабильный интерфейс для взаимодействия кода вне вашей библиотеки / исполняемого файла.
Наличие всего вашего класса в одном файле облегчит выполнение того, что вы хотите. Это не решит проблему переименования метода и необходимости поиска в каждом месте, где вызывается метод, но это обеспечит более понятные сообщения об ошибках. Нет ничего хуже, чем когда ваш заголовок объявляет метод одним способом, но вы реализуете его по-другому. Другой код, который вызывает файл заголовка, будет правильно скомпилирован, и вы получите исключение для ссылки, а файл реализации будет тем, который жалуется на то, что метод не был определен. Когда вы определяете каждый метод на месте (в фактическом объявлении класса), вы получите одно и то же сообщение об ошибке, независимо от того, какой файл содержит его.
Вы также можете посмотреть на этот вопрос: Хорошие инструменты рефакторинга для C ++
Как C / C ++ разрешает файлы заголовка / реализации
На базовом уровне C (а C ++ построен на этой основе), файлы заголовков объявляют обещание функции / struct / variable, которой достаточно, чтобы компилятор мог создать объектный файл. Аналогично, заголовочные файлы C ++ объявляют обещание функций, структур, классов и т. Д. Именно это определение использует компилятор для резервирования пространства в стеке и т. Д.
Файлы .c или .cpp имеют реализацию. Поскольку компилятор преобразует каждый файл реализации в объектный файл, возникают нереализованные понятия (то, что было объявлено в заголовке). Компоновщик связывает хуки с реализациями в других объектных файлах и создает больший двоичный файл, который включает весь код (разделяемая библиотека или исполняемый файл).
VS Specific
Что касается работы с таковыми в Visual Studio, есть несколько мастеров, которые помогают сделать вещи немного проще. Мастер нового класса создаст вашу подходящую пару заголовочных файлов и файлов реализации. Есть даже функция браузера классов, которая позволит вам объявлять новые методы. Он вставит определение в заголовок и заглушку реализации в файл .cpp. Visual Studio имеет эти функции более десяти лет (пока я их использовал).