Đồng nghiệp của bạn đã sai, cách phổ biến là và luôn luôn đặt mã trong các tệp .cpp (hoặc bất kỳ tiện ích mở rộng nào bạn muốn) và khai báo trong các tiêu đề.
Thỉnh thoảng có một số công đức để đặt mã trong tiêu đề, điều này có thể cho phép trình biên dịch thông minh hơn. Nhưng đồng thời, nó có thể phá hủy thời gian biên dịch của bạn vì tất cả mã phải được xử lý mỗi khi nó được trình biên dịch đưa vào.
Cuối cùng, thường rất khó chịu khi có các mối quan hệ đối tượng tròn (đôi khi mong muốn) khi tất cả các mã là các tiêu đề.
Tóm lại, bạn đã đúng, anh sai.
EDIT: Tôi đã suy nghĩ về câu hỏi của bạn. Có một trường hợp mà những gì anh ấy nói là đúng. mẫu. Nhiều thư viện "hiện đại" mới hơn như boost sử dụng rất nhiều mẫu và thường chỉ là "tiêu đề". Tuy nhiên, điều này chỉ nên được thực hiện khi xử lý các mẫu vì đó là cách duy nhất để làm điều đó khi giao dịch với chúng.
EDIT: Một số người muốn làm rõ hơn một chút, đây là một số suy nghĩ về nhược điểm để viết mã "chỉ tiêu đề":
Nếu bạn tìm kiếm xung quanh, bạn sẽ thấy khá nhiều người đang cố gắng tìm cách giảm thời gian biên dịch khi xử lý boost. Ví dụ: Cách giảm thời gian biên dịch với Boost Asio , đang xem phần biên dịch 14 giây của một tệp 1K có kèm theo boost. Số 14 có vẻ không "bùng nổ", nhưng chắc chắn nó dài hơn rất nhiều so với thông thường và có thể tăng lên khá nhanh. Khi giao dịch với một dự án lớn. Các thư viện chỉ tiêu đề không ảnh hưởng đến thời gian biên dịch theo cách khá đo lường được. Chúng tôi chỉ chịu đựng nó vì boost rất hữu ích.
Ngoài ra, có nhiều thứ không thể được thực hiện chỉ trong các tiêu đề (thậm chí boost có các thư viện bạn cần liên kết đến một số phần nhất định như luồng, hệ thống tệp, v.v.). Một ví dụ chính là bạn không thể có các đối tượng toàn cầu đơn giản trong libs tiêu đề (trừ khi bạn sử dụng từ gớm ghiếc là một singleton) vì bạn sẽ gặp phải nhiều lỗi định nghĩa. LƯU Ý: Các biến nội tuyến của C ++ 17 sẽ làm cho ví dụ cụ thể này có thể thực hiện được trong tương lai.
Như một điểm cuối cùng, khi sử dụng boost làm ví dụ về mã chỉ tiêu đề, một chi tiết lớn thường bị bỏ qua.
Boost là thư viện, không phải mã cấp độ người dùng. vì vậy nó không thay đổi thường xuyên. Trong mã người dùng, nếu bạn đặt mọi thứ vào tiêu đề, mỗi thay đổi nhỏ sẽ khiến bạn phải biên dịch lại toàn bộ dự án. Đó là một sự lãng phí thời gian lớn (và không phải là trường hợp đối với các thư viện không thay đổi từ biên dịch sang biên dịch). Khi bạn phân chia mọi thứ giữa tiêu đề / nguồn và tốt hơn nữa, hãy sử dụng khai báo chuyển tiếp để giảm bao gồm, bạn có thể tiết kiệm hàng giờ biên dịch lại khi được thêm vào trong một ngày.