我想用链表实现一个堆栈类。 这是我在头文件中定义的。对于Stack中的每个元素,元素中有两个数据:
#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;
};
但是如果我将私有(private)字段中的结构节点更改为这样的类会怎样:
#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 ? 为什么?
最佳答案
只要我不想公开内部数据,我就会做你现在正在做的事情。我定义我的链表
template <class T>
class List{
class Node{
public:
friend class List;
private:
private members
};
public:
};
我更喜欢这种风格,因为我使用 Java 编程,它以这种非常适合我的格式使用内部类和静态内部类。
您将需要封装 Node 的私有(private)字段以从 List 访问它们,但除此之外,您可以这样定义您的类,甚至可以使用结构,但回想一下类和结构之间的唯一区别是结构成员默认是公共(public)的.
关于c++ - Stack使用Struct或Class实现其私有(private)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15689484/