Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在头文件中声明变量和函数的重要性_C++ - Fatal编程技术网

C++ 在头文件中声明变量和函数的重要性

C++ 在头文件中声明变量和函数的重要性,c++,C++,我在.h文件中声明了所有变量和函数,这已经成为我的习惯(我正在使用cocos2dx编程) 我读到,您应该尝试在.h文件中包含最少的内容,在.cpp文件中包含最多的内容 因为我在.h文件中声明了所有变量和函数,如果我需要使用另一个文件中的另一个类,那么我需要在.h文件中包含该类以将该类声明为变量 所以我想知道在.h文件和.cpp文件中声明变量的重要性。我也想知道哪种方式是最标准的 若并没有区别,那个么为什么人们会在私有文件中声明变量和函数,因为在.h文件中声明函数需要在.cpp文件中再次写入 (工

我在.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文件的好处

  • 隐藏实现:您可以将声明与定义分开。因此,假设您想要创建一个API,您可以将实际逻辑放入.cpp(编译时成为库文件)中,并将声明放入.h中,用户可以使用该声明访问API

  • 减少编译时间:在.cpp中定义并在.h中声明的一个好处是当您想要更改定义时。这样的更改只会更改cpp文件,并且必须重新编译.cpp。如果定义位于.h文件中,则必须重新编译包含.h文件的所有.cpp文件,这将花费更多时间

  • 提高可读性:以某种方式将声明和定义分开可以提高可读性


  • < C++中的头文件和源文件有一个原因是C++代码是非托管的。它由处理器直接执行(与在虚拟环境中执行的C#,Java不同)。这需要有一个头文件来保存符号信息,而符号信息与实现分离,充当它的接口。

    对于您的特定示例,您可以避免使用将类私有方法放入头文件中。您的头文件中只声明了公开可见的(
    public
    /
    受保护的
    )成员,其余所有成员都转到
    .cpp

    .h文件<