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 foo
dibandingkan 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.cpp
sekarang tidak ada hubungannya denganfoo
kelas Anda dan harus dibiarkan kosong (mungkin tetapi#include
untuk membuat sistem build Anda bahagia).