2
我想通過使用鏈表實現一個堆棧類。 下面是我在頭文件中如何定義。對於堆棧中的每個元素,也有要素兩個數據:堆棧使用結構或類來實現其私有數據
#ifndef MYSTACK_H_INCLUDED
#define MYSTACK_H_INCLUDED
#include <iostream>
using namespace std;
template<typename T>
class MyStack{
public:
MyStack();
~MyStack();
...
...
private:
struct node;
node* head;
int _top;
};
template<typename T>
struct MyStack<T>::node {
node(node*, T, T);
T position_x;
T position_y;
node* next;
};
但如果我改變在私人領域的結構節點到這樣一類:
#ifndef MYSTACK_H_INCLUDED
#define MYSTACK_H_INCLUDED
#include <cstddef> // for std:size_t
using namespace std;
template <class T>
class MyStack{
public:
MyStack();
~MyStack();
...
...
private:
class Node {
friend class MyStack<T>;
public:
Node(T, Node*);
private:
const T value;
Node *next;
};
Node *head;
};
#endif // MYSTACK_H_INCLUDED
是否有必要在Stack類中爲Node創建另一個類或者我只是使用Struct? 爲什麼?
在C++中,'struct'和'class'之間的唯一區別是成員默認的「可見性」。對於'struct',默認值是成員是'public',而'class'是成員是'private'。 –
此外,在第一種情況下,結構_is_是MyStack類中的私有結構,就像第二個示例中的Node類是私有類一樣。這是因爲它是在'MyStack'中聲明的,即使它是一個前向聲明,範圍仍然在周圍的類中。 –