帮我了解C ++标头文件和类

Jam*_*est 5 c++

好的,所以我试图从中间的Delphi过渡到C ++面向对象的编程。我已经阅读了Ivar Horton关于Visual C ++ 2010的书。我可以毫无问题地开发出简单的控制台应用程序。我得到了语言本身(有点)。我苦苦挣扎的地方是头文件和类。

我也了解一般头文件和类的作用。当我使用标题或类时,我得到的不是实现?我需要为我所做的所有事情创建类吗?我的实际工作职能需要在头文件中还是在CPP文件中?我对这些方法的正确用法迷失了,可以使用经验丰富的程序员的一些实际指导。

如果有帮助,我正在尝试使用MFC过渡到Windows应用程序。

小智 3

我还了解头文件和类的一般用途。我没有得到的是实现何时使用标头或类?我需要为我所做的一切创建类吗?我的实际工作函数需要在头文件中还是在 CPP 文件中?我对这些的正确使用感到困惑,并且可以使用更有经验的程序员的一些现实世界指导。

倒回几年后,我也会有同样的问题——我认为这并不是一个被很好地涵盖的东西。那么让我们来分解一下我认为是你问题的核心部分。

我需要为我所做的一切创建类吗?

这是主观的,但我会说不。您需要为您想要建模的事物创建一个类,如果这样做有意义的话。int一个例子可能是比 C 的类型(如和 )更复杂的数据项char。您还应该使用String类 和STL的容器(查看向量)。简而言之,这意味着您可能会使用类来完成您所做的大多数事情,但这并不意味着代码的最后一小部分必须以某种方式落入某个类中。

我还了解头文件和类的一般用途。

让我重复一下你得到的结果。正如您可能知道的那样,C因此C++需要编译单元中不在其之前的函数的原型定义(在所有标头替换其包含之后的完整源代码)。像这样:

#include <iostream>
using namespace std;

int testadd()
{
    int a = 4; int b = 2; int c = add(a, b);
    return c;
}

int add(int x, int y)
{
    return x + y;
}

int main(int argc, char** argv)
{
    cout << "result is: " << c << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(人为的例子)不起作用,因为testadd找不到addmain可以找到add

因此,理想情况下,您的程序应该以您想要使用的所有函数、类等的列表开始。有人认为,如果将它们放在与实现不同的单独文件中,这将是一个好主意,因为这样可以使内容更容易阅读,并节省程序员使用您的工作(在库场景中)的时间,无需将原型重写为函数。使使用任何其他库变得更加容易。

因此,当您实现类时,您可以选择:

  1. 以原型形式声明类(函数以原型结尾)并在 cpp 单元中实现它们。
  2. 在头文件中实现全部内容。

你做什么完全取决于你自己。我坚持使用 1,因为我认为它更好,但没有人说你必须这样做,而且我已经看到这两种技术的使用。

顺便说一句,值得一提的是,如果您选择 1,假设您有 main.cpp、myclass.h、myclass.cpp,并且您从 main.cpp 调用 myclass.cpp 中实现的 myclass 方法,则编译时会发生这两个单元(*.cpp) 被编译为机器代码形式(在 vc 中为 main.obj 和 myclass.obj)。然后,链接器负责将这两个对象放入一个exe,确保每个编译单元中调用的所有符号函数都可以在引用的其他对象或库之一中找到。如果发生这种情况,它会生成一个 exe。如果没有,您会收到错误。这是在学习用户中引发此类问题的另一个结果(链接错误)。