eclipse为c ++类创建头文件和cpp为什么?

时间:2013-12-05 21:20:17

标签: c++ eclipse

我是c ++的新手(我之前有过Java和C的时间) 我无法得到它...当我想创建一些新类时,eclipse正在创建头文件和cpp文件,为什么?事情是,似乎标题包括类基本植入,那么cpp文件正在被使用?

标题:

#ifndef HEAP_H_
#define HEAP_H_

namespace std {

class Heap {
public:
        Heap();
        virtual ~Heap();
};

} /* namespace std */
#endif /* HEAP_H_ */

CPP:

#include "Heap.h"

namespace std {

Heap::Heap() {
        // TODO Auto-generated constructor stub

}

Heap::~Heap() {
        // TODO Auto-generated destructor stub
}

} /* namespace std */

c ++中的面向对象思维似乎很奇怪。当你有一个带有方法的类文件时,头文件的重点是什么? 无论如何,thx领先!

2 个答案:

答案 0 :(得分:2)

头文件是类声明的位置。这样做是为了使多个文件能够包含Heap类。

你可能只是在头文件中单独编写实现,但是由于方法/类/被多次声明,你将无法将它包含在多个文件中。这在C中也是如此。如果您创建包含文件:

int double_me(int number) {
        return number * 2;
}

然后将其包含在多个文件中,编译器会抱怨多次声明相同的方法。

话虽如此,头文件是声明所有类函数和变量的地方。 .cpp源文件是编写实现的地方。

例如,如果要向Heap类添加方法:

Heap.h:

#ifndef HEAP_H_
#define HEAP_H_

namespace std {

class Heap {
public:
        Heap();
        virtual ~Heap();
        void do_nothing(int some_parameter);
};

} /* namespace std */
#endif /* HEAP_H_ */

Heap.cpp:

#include "Heap.h"

namespace std {

Heap::Heap() {
    // TODO Auto-generated constructor stub

}

Heap::~Heap() {
    // TODO Auto-generated destructor stub
}

void Heap::do_nothing(int some_parameter) {
}

另一个优点是减少了编译时间。如果要进行重新编译,但Heap对象文件没有更改,那么它就不必重新编译Heap实现。

答案 1 :(得分:0)

C ++类具有头文件和实现文件是非常标准的。这样做的原因是,使用该类的其他函数通常需要知道调用类的方式(在头文件中找到),而他们不需要知道这些调用是如何进行的。实际实施。在头文件中实现的唯一函数应该是内联的(可以移动到调用函数中)或模板函数。

实际上,如果编译器多次将相同的函数实现到多个对象(* .o)文件中,它将在链接期间返回错误。这与C实现文件头文件相同。头文件包含原型,实现文件包含实现。