我是 C++ 的新手(我之前接触过 Java 和 C)
我无法理解...当我想创建一些新类时,eclipse 正在创建头文件和 cpp 文件,为什么?问题是, header 似乎包含类基本植入,那么 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++ 中的面向对象思想看起来很奇怪。当你有一个带有方法的类文件时,头文件有什么意义?
无论如何,谢谢!
头文件是类声明所在的地方。这样做是为了让多个文件能够包含 Heap 类。
您可以只在头文件中单独编写实现,但由于多次声明了方法/类/任何内容,您将无法将其包含在多个文件中。这实际上在 C 中也是如此。如果您创建包含文件:
int double_me(int number) {
return number * 2;
}
然后将其包含在多个文件中,编译器会提示同一个方法被多次声明。
也就是说,头文件是声明所有类函数和变量的地方。 .cpp 源文件是编写实现的地方。
例如,如果您想向 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_ */
堆.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) {
}
另一个优点是减少了编译时间。如果要进行重新编译,但堆对象文件未更改,则不必重新编译堆实现。