我已经看到,在C ++中,关于头文件中的内容和cpp文件中的内容有几种不同的范例。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
为了使您的构建系统满意)。