헤더 파일에 무엇이 들어가고 cpp 파일에 무엇이 들어가는 지에 관해 C ++에는 여러 가지 패러다임이 있음을 보았습니다. 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
빌드 시스템을 행복하게 만들 수 있습니다).