C ++には、ヘッダーファイルの内容とcppファイルの内容に関するいくつかの異なるパラダイムがあることがわかりました。私の知る限り、ほとんどの人、特に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から来た私は、いくつかの理由で常にこの2番目の方法にこだわっています。たとえば、インターフェイスまたはメソッドの名前が変更された場合、1か所で何かを変更するだけです。それらの実装を見て、名前がにfoo
比べて読みやすいことがわかりましたfoo::foo
。
どちらの方法でも賛否両論を集めたい。まだ他の方法がありますか?
私のやり方の欠点の1つは、もちろん、時折の前方宣言が必要なことです。
foo.cpp
foo
クラスとは何の関係もないので、空のままにしておく必要があります(ただし、#include
ビルドシステムを幸せにするためです)。