Menulis Lebih Ramah Refactoring C ++
Di C ++ Anda tidak harus menggunakan header sama sekali. Anda dapat mendefinisikan seluruh objek dalam satu file seperti yang Anda lakukan dengan C # atau Java. Pengembang C umumnya hanya akan menyimpan panggilan eksternal dalam file header. Semua panggilan internal akan ditentukan dalam file .c. Dengan cara yang sama, Anda dapat memesan file C ++ .h untuk kelas / antarmuka (kelas abstrak virtual murni) / etc. yang dimaksudkan untuk dibagikan di luar DLL. Untuk kelas / struct / antarmuka internal, dll. Anda cukup menyertakan file .cpp yang Anda butuhkan:
#include<myclass.cpp>
Ini sepertinya bukan pendekatan yang paling populer, tetapi ini legal C ++. Pasti akan menjadi kemungkinan untuk semua kode internal Anda. Ini memungkinkan kode internal dan sekumpulan kelas untuk berubah lebih banyak secara radikal sambil menyediakan antarmuka yang lebih stabil untuk kode di luar perpustakaan Anda / yang dapat dieksekusi untuk berinteraksi.
Memiliki seluruh kelas Anda di dalam satu file akan membuatnya lebih mudah untuk melakukan apa yang Anda inginkan. Itu tidak akan menyelesaikan masalah penggantian nama metode dan harus mencari ke setiap tempat metode itu dipanggil, tetapi itu akan memastikan Anda memiliki pesan kesalahan yang lebih dapat dipahami. Tidak ada yang lebih buruk daripada memiliki header Anda mendeklarasikan metode satu arah, tetapi Anda menerapkannya secara berbeda. Kode lain yang memanggil file header akan dikompilasi dengan benar dan Anda akan mendapatkan pengecualian tautan, sementara file implementasi akan menjadi salah satu yang mengeluh bahwa metode itu tidak didefinisikan. Ketika Anda mendefinisikan setiap metode di tempat (dalam deklarasi kelas yang sebenarnya), Anda akan mendapatkan pesan kesalahan yang sama tidak peduli file apa yang menyertakannya.
Anda mungkin juga ingin melihat pertanyaan ini: Alat refactoring yang bagus untuk C ++
Bagaimana C / C ++ Menyelesaikan File Header / Implementasi
Pada level C dasar (dan C ++ dibangun di atas fondasi itu), file header menyatakan janji fungsi / struct / variabel yang cukup untuk memungkinkan kompiler membuat file objek. Demikian pula file header C ++ menyatakan janji fungsi, struct, kelas, dll. Ini adalah definisi yang digunakan kompilator untuk memesan ruang di stack, dll.
File .c atau .cpp memiliki implementasinya. Ketika kompiler mengonversi setiap file implementasi ke file objek, ada kait ke konsep yang tidak diterapkan (apa yang dinyatakan dalam header). Tautan mengikat kait ke implementasi di file objek lain dan membuat biner yang lebih besar yang mencakup semua kode (shared library atau executable).
VS Spesifik
Untuk bekerja dengan orang-orang di Visual Studio, ada beberapa penyihir yang membantu membuat segalanya lebih mudah. Wizard kelas baru akan membuat pasangan header dan file implementasi yang cocok. Bahkan ada fitur browser kelas yang akan memungkinkan Anda mendeklarasikan metode baru. Ini akan menyuntikkan definisi di header dan rintisan implementasi dalam file .cpp. Visual Studio telah memiliki fitur-fitur tersebut selama lebih dari satu dekade (selama saya telah menggunakannya).