堆栈使用Struct或Class来实现其私有数据

时间:2013-03-28 18:27:18

标签: c++ class struct stack

我想使用链表实现Stack Class。 以下是我在头文件中定义的方法。对于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;
};

但是如果我将私有字段中的struct节点更改为这样的类:

#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

是否有必要在Node类的Stack类中创建另一个类,或者我只使用Struct? 为什么?

1 个答案:

答案 0 :(得分:0)

每当我不希望暴露内部数据时,我就会做你现在正在做的事情。我定义了我的链表

template <class T>
class List{

    class Node{
    public:

         friend class List;              

    private:

         private members
    };

    public:
};

我更喜欢这种风格,因为我使用Java编程,它以这种格式使用内部和静态内部类,这对我来说很舒服。

您需要封装Node的私有字段以从List访问它们,但除此之外,您可以定义类,甚至使用结构但只记得类和结构之间的区别是结构成员默认是公共的。