Написання ще «Дружнього рефакторингу» C ++
У C ++ взагалі не потрібно використовувати заголовки. Ви можете визначити весь об'єкт в одному файлі так само, як і з C # або Java. Розробники C зазвичай зберігають лише зовнішні дзвінки у файлі заголовка. Усі внутрішні дзвінки визначатимуться у файлі .c. Таким же чином ви можете зарезервувати свої файли C ++ .h для класів / інтерфейсів (чисті віртуальні абстрактні класи) / тощо. які призначені для спільного використання за межами DLL. Для внутрішніх класів / структур / інтерфейсів тощо ви просто включите файл .cpp, який вам потрібен:
#include<myclass.cpp>
Здається, це не найпопулярніший підхід, але це легальний C ++. Це, безумовно, буде можливим для всього вашого внутрішнього коду. Це дозволяє внутрішньому коду та набору класів змінюватися набагато радикальніше, забезпечуючи більш стабільний інтерфейс для коду поза вашою бібліотекою / виконуваним файлом для взаємодії.
Якщо ви будете мати весь клас в одному файлі, ви будете легше робити те, що ви хочете. Це не вирішить проблему перейменування методу та необхідність пошуку в кожному місці, яке називається методом, але це переконається у тому, що у вас з’являться більш розбірливі повідомлення про помилки. Нічого гіршого, ніж заголовок оголосити метод одним способом, але ви реалізуєте його по-іншому. Інший код, який викликає файл заголовка, буде складено належним чином, і ви отримаєте виняток посилання, тоді як файл реалізації буде тим, хто скаржиться, що метод не визначений. Коли ви визначите кожен метод на місці (у фактичному оголошенні класу), ви отримаєте те саме повідомлення про помилку, незалежно від того, який файл включає його.
Ви також можете поглянути на це питання: Хороші інструменти рефакторингу для C ++
Як C / C ++ вирішує файли заголовка / реалізації
На базовому рівні C (і C ++ побудований на цій основі) файли заголовків оголошують обіцянку функції / struct / змінної, якої достатньо, щоб компілятор міг створити файл об'єкта. Аналогічно файли заголовків C ++ оголошують обіцянку функцій, структур, класів тощо. Саме таке визначення компілятор використовує для резервування місця в стеку тощо.
Файли .c або .cpp мають реалізацію. Оскільки компілятор перетворює кожен файл реалізації в об’єктний файл, виникають гачки для нереалізованих понять (що було оголошено у заголовку). Лінкер прив'язує гачки до реалізацій в інших об’єктних файлах і створює більший двійковий файл, який включає весь код (спільна бібліотека або виконуваний файл).
VS Specific
Щодо роботи з тими, хто працює у Visual Studio, є кілька майстрів, які допомагають полегшити справи. Новий майстер класу створить вашу відповідну пару заголовків та файлів реалізації. Існує навіть функція браузера класу, яка дозволить вам оголосити нові методи. Він введе визначення у заголовок та заглушку реалізації у файл .cpp. Візуальна студія мала ці функції більше десяти років (поки я ними користувалася).