C++ eclipse为c++;上课为什么?

C++ eclipse为c++;上课为什么?,c++,eclipse,C++,Eclipse,标题: #ifndef HEAP_H_ #define HEAP_H_ namespace std { class Heap { public: Heap(); virtual ~Heap(); }; } /* namespace std */ #endif /* HEAP_H_ */ cpp: C++中的面向对象思维似乎很奇怪。当您有一个包含方法的类文件时,头文件有什么意义? 无论如何,谢谢 头文件是类声明所在的位置。这样做是为了使多个文件能够包含Hea

标题:

#ifndef HEAP_H_
#define HEAP_H_

namespace std {

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

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

C++中的面向对象思维似乎很奇怪。当您有一个包含方法的类文件时,头文件有什么意义?

无论如何,谢谢

头文件是类声明所在的位置。这样做是为了使多个文件能够包含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) {
}

另一个优点是减少了编译时间。如果重新编译是要发生的,但是堆对象文件没有被改变,那么它就不必重新编译堆实现。

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


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

我想我现在明白了!总之,头是类本身的某种接口?我做对了吗?我不能投票赞成你的答案,但我想我很清楚它的意义(thx:)。没错。您仍然可以接受它作为答案:请编辑您的问题并输入代码。可能的重复项
#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) {
}