Cpp链接/标题,为什么这样做?

时间:2013-07-20 02:30:31

标签: c++

我是c ++的新手,过去几天我“实际上”学到了很多东西。我刚刚学会了如何使用“标题”链接今天的多个文件或我认为的名称。

我的问题与标题和链接文件有关。

1。我被告知你应该在头文件中“定义”类,结构或函数。然后在相应的c plus plus文件中设置定义?这是我正在做的事情,这是我在这里阅读的地方:http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044842972&id=1043284392

Header.h文件代码

#ifndef HEADER_H
#define HEADER_H
class simple_math{
public:
    int add( int, int);
     int subtract( int, int);
};

#endif

extras.cpp文件代码

#include "header.h"

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

int math::subtract( int x, int y){
    return( x - y );
};

为什么我们不在实际的.cpp文件中执行所有操作?为什么我们在头文件中发布声明性代码,然后在单独的.cpp文件中创建(对不起,如果我使用了错误的术语)原型?
    这对我来说似乎有些奇怪。有些如何在.cpp文件中定义这些函数或类方法,甚至在标题中都不是“#included”(我猜)。相反,标头包含在.cpp文件中,代码仍然可以正确执行。

1 个答案:

答案 0 :(得分:2)

头文件声明可用的内容。

它告诉编译器你可以访问这些类/方法/函数,以下是它们的使用方法(用于检查)。

.cpp文件实际上包含生成功能的代码。您只需要编译一次,而其他各种.cpp文件需要知道如何使用它。存在头文件的位置。另一个.cpp文件可以包含头文件,然后知道可用的内容。

现在是链接阶段:

你有很多目标文件。一些(如果不是全部)被告知有各种各样的函数/方法/类可用,但它们不包含执行它们的机器代码 - 因为它们存在于其他地方。链接执行一些编织并解析这些对其他对象中的函数等的悬空引用以生成可执行文件。

当然这会对模板产生一些影响 - 但这是另一篇文章。

顺便说一句:

习惯上将header.h称为simple_math.h,将extras.cpp称为simple_math.cpp

同样int math::add应为simple_math:add。与其他方法一样。