C++ 在头文件中声明变量和函数的重要性
我在.h文件中声明了所有变量和函数,这已经成为我的习惯(我正在使用cocos2dx编程) 我读到,您应该尝试在.h文件中包含最少的内容,在.cpp文件中包含最多的内容 因为我在.h文件中声明了所有变量和函数,如果我需要使用另一个文件中的另一个类,那么我需要在.h文件中包含该类以将该类声明为变量 所以我想知道在.h文件和.cpp文件中声明变量的重要性。我也想知道哪种方式是最标准的 若并没有区别,那个么为什么人们会在私有文件中声明变量和函数,因为在.h文件中声明函数需要在.cpp文件中再次写入 (工业工程)C++ 在头文件中声明变量和函数的重要性,c++,C++,我在.h文件中声明了所有变量和函数,这已经成为我的习惯(我正在使用cocos2dx编程) 我读到,您应该尝试在.h文件中包含最少的内容,在.cpp文件中包含最多的内容 因为我在.h文件中声明了所有变量和函数,如果我需要使用另一个文件中的另一个类,那么我需要在.h文件中包含该类以将该类声明为变量 所以我想知道在.h文件和.cpp文件中声明变量的重要性。我也想知道哪种方式是最标准的 若并没有区别,那个么为什么人们会在私有文件中声明变量和函数,因为在.h文件中声明函数需要在.cpp文件中再次写入 (工
.h文件
:
class classA {
private:
void function();
};
void classA::function() {
...do something...
}
class ClassA {
public:
ClassA();
~ClassA();
void foo();
private:
class ClassAImpl;
ClassAImpl* pImpl;
};
#include "ClassA.h"
struct ClassAImpl
void function() {
// ...do something...
}
};
ClassA::ClassA()
: pImpl(new ClassAImpl()) {
}
ClassA::~ClassA() {
delete pImpl;
}
void ClassA::foo() {
pImpl->function();
}
.cpp文件
:
class classA {
private:
void function();
};
void classA::function() {
...do something...
}
class ClassA {
public:
ClassA();
~ClassA();
void foo();
private:
class ClassAImpl;
ClassAImpl* pImpl;
};
#include "ClassA.h"
struct ClassAImpl
void function() {
// ...do something...
}
};
ClassA::ClassA()
: pImpl(new ClassAImpl()) {
}
ClassA::~ClassA() {
delete pImpl;
}
void ClassA::foo() {
pImpl->function();
}
在头文件中声明变量和函数的重要性是什么?在头文件中声明.cpp文件中代码之外所需的任何内容,而不是更多。尽量减少里面的量。原因是其他程序员可能正在查看您的头文件(.h),它本质上是他们的API。作为一名OOP程序员,您希望尽可能多地隐藏对象的内部工作,也就是说,您不希望使用API的人依赖于可能随着对象结构的变化而变化的因素。同时,尽量保持变量的范围尽可能小。一般来说,最好避免使用全局变量。将它们作为参数传递几乎总是一个更好的主意。尽量保持变量在最低范围内。在C/C++中,
,声明的顺序是重要的。请记住,在设计这些语言时,编译器并不是今天的编译器。头文件是描述类、类型定义和枚举的“包含”内容。现在,您可以在头文件中提供实现(以及C++模板类的情况,您必须这样做)。您将内容的实现放入
.cpp
文件中。您没有两次编写函数(如果您这样做,编译器将有一个嘶嘶的适合)。在头文件中声明或实现它们,然后,在前者的情况下,在C++文件中实现它们。
代码的使用者(例如,在库项目中)将包括头文件(描述类),然后链接到对象文件(与.cpp
文件相反)。头文件提前为您提供了预期的符号和链接所依据的符号
模板在这方面有点奇怪(你不导出它们),它们只是头文件(我相信目前是这样)
由于编译器的工作方式,像C#这样的现代语言没有头文件的概念。C#编译器将文件视为一个“整体”,因此无需进行任何前向声明或担心头文件。C/C++编译器不这样做。我不确定(不去查它)这是由于当时的编译器技术还是当时的一个复杂的设计决定
您没有复制代码。通常,您会将声明放在头文件中,将定义放在cpp中。这样做有很多好处,其中最大的好处就是可重用性。如果您有多个文件需要使用某个类,只在需要的地方包含它比重新声明它要容易得多 能够将原型与实际成员体分离也是非常有用的。这允许您执行一些操作,例如使用二进制版本的实现,并且仍然可以公开函数名。这样,如果有人在使用您的类或库,他们可以看到如何使用它,但无法看到它实际上是如何工作的。这在大型项目和涉及版权时非常重要 这是一个很好的习惯,但如果你不保持条理,可能会让人困惑和不知所措。通常的做法是每个类都有一个实现文件(.cpp)和一个头(.h),这两个文件通常与类同名,以提高可读性
您应该避免仅使用头文件声明局部变量,因为通常最好将它们保留在需要的范围内。使用单独的.h和.cpp文件的好处
< C++中的头文件和源文件有一个原因是C++代码是非托管的。它由处理器直接执行(与在虚拟环境中执行的C#,Java不同)。这需要有一个头文件来保存符号信息,而符号信息与实现分离,充当它的接口。对于您的特定示例,您可以避免使用将类私有方法放入头文件中。您的头文件中只声明了公开可见的(
public
/受保护的
)成员,其余所有成员都转到.cpp
:
.h文件<