C ++ 'da başlık dosyasına ne girdiğine ve cpp dosyasına ne olduğuna dair birkaç farklı paradigma olduğunu gördüm. AFAIK, çoğu insan, özellikle C kökenli olanlar:
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; }
Ancak, öğretim görevlilerim genellikle yeni başlayanlara C ++ öğretiyor:
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
Aslen Java'dan geliyor, her zaman birkaç nedenden ötürü bu ikinci yola yapıştım, örneğin arayüz veya yöntem adları değiştiğinde tek bir yerde bir şey değiştirmek zorunda kalıyorum, sınıflardaki şeylerin farklı girintilerini sevdiğimde uygulamalarına bakın ve isimleri ile foo
karşılaştırıldığında daha okunabilir buluyorum foo::foo
.
Her iki şekilde de pro ve con toplamak istiyorum. Belki de başka yollar da vardır?
Yolumun bir dezavantajı elbette ara sıra ileri bildirimlere duyulan ihtiyaçtır.
foo.cpp
Artıkfoo
sınıfınızla hiçbir ilgisi yoktur ve boş bırakılmalıdır (belki de#include
yapı sisteminizi mutlu etmek için).