ฉันได้เห็นว่ามีกระบวนทัศน์ที่แตกต่างกันใน C ++ เกี่ยวกับสิ่งที่จะเข้าไปในไฟล์ส่วนหัวและสิ่งที่จะ cpp ไฟล์ AFAIK ผู้คนส่วนใหญ่โดยเฉพาะผู้ที่อยู่ในพื้นหลัง C ทำ:
foo.h
class foo {
private:
int mem;
int bar();
public:
foo();
foo(const foo&);
foo& operator=(foo);
~foo();
}
foo.cpp
#include foo.h
foo::bar() { return mem; }
foo::foo() { mem = 42; }
foo::foo(const foo& f) { mem = f.mem; }
foo::operator=(foo f) { mem = f.mem; }
foo::~foo() {}
int main(int argc, char *argv[]) { foo f; }
อย่างไรก็ตามอาจารย์ของฉันมักสอน C ++ ให้กับผู้เริ่มต้นเช่นนี้:
foo.h
class foo {
private:
int mem;
int bar() { return mem; }
public:
foo() { mem = 42; }
foo(const foo& f) { mem = f.mem; }
foo& operator=(foo f) { mem = f.mem; }
~foo() {}
}
foo.cpp
#include foo.h
int main(int argc, char* argv[]) { foo f; }
// other global helper functions, DLL exports, and whatnot
เดิมทีมาจาก Java ฉันยังติดอยู่กับวิธีที่สองนี้ด้วยเหตุผลหลายประการเช่นฉันต้องเปลี่ยนบางอย่างในที่เดียวถ้าส่วนต่อประสานหรือชื่อวิธีการเปลี่ยนแปลงที่ฉันชอบเยื้องสิ่งที่แตกต่างกันในชั้นเรียนเมื่อฉัน ดูที่การดำเนินของพวกเขาและที่ผมพบชื่ออ่านได้มากขึ้นในขณะที่เมื่อเทียบกับfoo
foo::foo
ฉันต้องการรวบรวมมืออาชีพและแย้งด้วยวิธีใดวิธีหนึ่ง อาจจะมีวิธีอื่น ๆ อีกหรือ?
ข้อเสียอย่างหนึ่งในทางของฉันคือแน่นอนว่าต้องมีการประกาศล่วงหน้าเป็นครั้งคราว
foo.cpp
ตอนนี้ไม่มีอะไรเกี่ยวข้องกับfoo
ชั้นเรียนของคุณและควรปล่อยว่างไว้ (อาจเป็นเพราะ#include
ระบบการสร้างของคุณมีความสุข)