.h
文件应该仅包含声明,而 cpp
文件应该仅包含实现。 我在cplusplus.com/stack_example上找到了一个自定义堆栈的示例,它看起来类似以下内容。
Stack.h 文件:
#ifndef _STACK_H_
#define _STACK_H_
#include <iostream>
#include "Exception.h"
template <class T>
class Stack {
public:
Stack():top(0) {
std::cout << "In Stack constructor" << std::endl;
}
~Stack() {
std::cout << "In Stack destructor" << std::endl;
while ( !isEmpty() ) {
pop();
}
isEmpty();
}
void push (const T& object);
T pop();
const T& topElement();
bool isEmpty();
private:
struct StackNode { // linked list node
T data; // data at this node
StackNode *next; // next node in list
// StackNode constructor initializes both fields
StackNode(const T& newData, StackNode *nextNode)
: data(newData), next(nextNode) {}
};
// My Stack should not allow copy of entire stack
Stack(const Stack& lhs) {}
// My Stack should not allow assignment of one stack to another
Stack& operator=(const Stack& rhs) {}
StackNode *top; // top of stack
};
现在我有一个问题。这个
.h
文件显然透露了一些实现细节。构造函数和析构函数都在 .h
文件中实现了。在我的理解中,它们应该在 .cpp
文件中实现。另外,还有那个 struct StackNode
也是在 .h
文件中实现的。它是否可能在 .cpp
文件中实现,并且只在头文件中声明?作为一个一般规则,如果它们在 .cpp
实现文件中,不是更好吗?以何种方式编写此代码,使其遵循 C++ 规则最佳?