c++ - Stack使用Struct或Class实现其私有(private)数据

标签 c++ class struct stack

我想用链表实现一个堆栈类。 这是我在头文件中定义的。对于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/

相关文章:

使用 malloc 为结构体分配 C 内存

c++ - 从文件中取出两个十六进制字符并存储为具有相关十六进制值的字符

c++ - 使用省略号转换指向函数的指针

php - 在 PHP 类中设置 session

swift - 将 NSCore 和 NSKeyedArchiver 与 SWIFT 结合使用

Python & Ctypes : Passing a struct to a function as a pointer to get back data

java - 线程中出现异常 "main"java.lang.UnsatisfiedLinkError : no JNTIest in java. library.path

c++ - 使用 boost::function 和 boost::bind

c++ - Qt Override class properties on control deserealization

c++ - 如何为结构成员分配其他函数返回的值?