-1

我是 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 文件中,并且代码仍然可以正确执行。

4

1 回答 1

2

头文件声明了可用的内容。

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

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

现在进入链接阶段:

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

当然,这对于模板来说有点小问题 - 但那是另一篇文章。

顺便提一句:

习惯上称为header.hassimple_math.hextras.cppas simple_math.cpp

int math::add应该是simple_math:add。与其他方法同上。

于 2013-07-20T02:40:38.860 回答