1

创建和定义类之后(在“h 文件”中)。除了“h文件”(属于该类)之外,我如何决定创建(或不创建)“cpp文件”(仅适用于该类)?

4

3 回答 3

2

这里有一个小例子可以帮助你。


这是 Foo 的头文件。让我们称之为“foo.h”

#pragma once
#ifndef FOO_H
#define FOO_H

class Foo{
public:
    void function();
protected:
private:
};
#endif

这是 Foo 的源文件。让我们称之为“foo.cpp”

#include "foo.h"
void Foo::function(){
    // ... implement ...
    return;
}

将它们编译在一起,我们可以创建一个目标文件。我们将其称为“foo.o”。只要链接“foo.o”,您就可以在程序中使用您的类。
例子:

#include "foo.h"
int main(){

    Foo foo;
    foo.function();

    return 0;
}
于 2012-11-12T10:17:37.070 回答
1

h 文件是一个描述符文件,它描述了您的函数/类的签名,以便其他 cpp 文件中的其他类可以使用它。

您需要将 h 文件视为合同。您正在声明一项义务。

稍后,当您决定实施 cpp 时,您正在履行义务。

其他类/cpp 文件可以仅依赖于您的义务,假设您还将在 cpp 中实现该义务。

例如:

  1. 您创建一个 .h 文件“myClassA.h”并使用名为 myClassA.SayHello() 的成员方法声明一个名为 myClassA 的类
  2. 您将 myClassA.h 包含在您创建 myClassB.cpp 的另一个类中,这样 myClassB 就知道 myClassA 有一个名为 SayHello() 的方法,并且它可以调用它。
  3. 如果你不包含 myClassA.h 并且你尝试在 myClassB.cpp 中调用 myClassA.SayHello(),你会从你的编译器中得到一个错误,因为 myClassB 不“知道”myClassA。
  4. 如果您确实包含了 h 文件,但没有费心在 myClassA.cpp 中实际创建和实现 myClassA,您将收到编译错误,因为没有找到实现。
于 2012-11-12T10:22:12.457 回答
0

最佳做法是将头文件和实现文件分开,以便在头文件 .h 中定义类并在 .cpp 文件中实现它,这将帮助您跟踪和调试错误并显示干净的代码,

只需在模板类中注意它必须在单独的头文件中定义,以通过将模板与普通类分开来保持代码结构良好和干净

于 2012-11-12T10:14:37.603 回答