Saya telah melihat bahwa ada beberapa paradigma yang berbeda dalam C ++ tentang apa yang masuk ke file header dan apa ke file cpp. AFAIK, kebanyakan orang, terutama yang berlatar belakang C, melakukan:
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; }
Namun, dosen saya biasanya mengajar C ++ kepada pemula seperti ini:
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
Awalnya berasal dari Jawa, saya juga selalu terjebak dengan cara kedua ini karena beberapa alasan, seperti bahwa saya hanya perlu mengubah sesuatu di satu tempat jika antarmuka atau nama metode berubah, bahwa saya suka lekukan yang berbeda dari hal-hal di kelas ketika saya lihat implementasinya, dan saya menemukan nama lebih mudah dibaca foodibandingkan dengan foo::foo.
Saya ingin mengumpulkan pro dan kontra untuk kedua cara. Mungkin masih ada cara lain?
Salah satu kelemahan dari cara saya tentu saja adalah kebutuhan untuk deklarasi maju sesekali.
foo.cppsekarang tidak ada hubungannya denganfookelas Anda dan harus dibiarkan kosong (mungkin tetapi#includeuntuk membuat sistem build Anda bahagia).