Rekan kerja Anda salah, cara umum adalah dan selalu menempatkan kode dalam file .cpp (atau ekstensi apa pun yang Anda suka) dan deklarasi dalam header.
Kadang-kadang ada beberapa manfaat untuk menempatkan kode di header, ini dapat memungkinkan inlining lebih pintar oleh kompiler. Tetapi pada saat yang sama, ini dapat menghancurkan waktu kompilasi Anda karena semua kode harus diproses setiap kali dimasukkan oleh kompiler.
Akhirnya, sering menjengkelkan memiliki hubungan objek melingkar (kadang-kadang diinginkan) ketika semua kode adalah header.
Intinya, Anda benar, dia salah.
EDIT: Saya telah memikirkan pertanyaan Anda. Ada satu kasus di mana apa yang dia katakan itu benar. template. Banyak pustaka "modern" yang lebih baru seperti boost yang banyak menggunakan templat dan seringkali hanya "header". Namun, ini hanya boleh dilakukan ketika berhadapan dengan template karena itu adalah satu-satunya cara untuk melakukannya ketika berhadapan dengan template.
EDIT: Beberapa orang ingin sedikit lebih banyak klarifikasi, berikut beberapa pemikiran untuk menulis kode "hanya header":
Jika Anda mencari di sekitar, Anda akan melihat cukup banyak orang mencoba menemukan cara untuk mengurangi waktu kompilasi ketika berhadapan dengan dorongan. Misalnya: Cara mengurangi waktu kompilasi dengan Boost Asio , yaitu melihat kompilasi 14 file tunggal 1K dengan tambahan yang disertakan. 14s mungkin tidak tampak "meledak", tetapi tentu jauh lebih lama dari biasanya dan dapat bertambah dengan cepat. Saat berhadapan dengan proyek besar. Hanya pustaka header yang memengaruhi waktu kompilasi dengan cara yang cukup terukur. Kami hanya mentolerirnya karena peningkatan sangat berguna.
Selain itu, ada banyak hal yang tidak dapat dilakukan di header saja (bahkan meningkatkan memiliki perpustakaan Anda perlu menautkan ke bagian-bagian tertentu seperti utas, sistem file, dll). Contoh utama adalah bahwa Anda tidak dapat memiliki objek global sederhana di header hanya libs (kecuali Anda menggunakan kekejian yang merupakan singleton) karena Anda akan mengalami beberapa kesalahan definisi. CATATAN: Variabel inline C ++ 17 akan membuat contoh khusus ini bisa dilakukan di masa depan.
Sebagai poin terakhir, ketika menggunakan boost sebagai contoh kode hanya header, detail besar sering terlewatkan.
Boost adalah pustaka, bukan kode tingkat pengguna. jadi itu tidak sering berubah. Dalam kode pengguna, jika Anda meletakkan semuanya di header, setiap perubahan kecil akan menyebabkan Anda harus mengkompilasi ulang seluruh proyek. Itu buang-buang waktu yang monumental (dan bukan untuk perpustakaan yang tidak berubah dari kompilasi ke kompilasi). Ketika Anda membagi hal-hal antara header / sumber dan yang lebih baik lagi, gunakan deklarasi maju untuk mengurangi termasuk, Anda dapat menghemat waktu mengkompilasi ulang ketika ditambahkan dalam sehari.