类和结构嵌套

use*_*988 4 c++ struct class

我对这段代码不是很清楚

外面是一个class和内在的struct,任何人都可以帮我解释一下吗?

class Stack {
    struct Link {
        void* data;
        Link* next;
        Link(void* dat, Link* nxt):
        data(dat),next(nxt) {}
    }* head;
public:
    Stack():head(0) {}
    ~Stack() {
        require(head==0,"Stack not empty");
    }
    void push(void* dat) {
        head = new Link( dat, head );
    }
    void peek() const {
        return head ? head->data : 0;
    }

    void* pop() {
        if(head == 0)  return 0;
        void* result = head->data;
        Link* oldHead = head;
        head = head->next;
        delete oldHead;
        return result;
    }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是关注前几行

class Stack {
    struct Link {
        void* data;
        Link* next;
        Link(void* dat, Link* nxt):
        data(dat),next(nxt) {}
    }* head;
Run Code Online (Sandbox Code Playgroud)

class Stack和之间的关系是struct Link什么?

Luc*_*ore 6

Link在内部声明Stack,因为private默认情况下,它不能在类外使用.

此外,Stack还有一个head类型的成员Link*.

class和之间唯一的区别struct是缺省访问级别 - public对于struct和privateclass,所以不要让"在类中声明的struct"让你感到困惑.除了访问级别之外,它与"在类中声明的类"或"在结构内声明的结构"相同.


Alo*_*ave 5

Stack和结构Link嵌套的
注意,嵌套类在访问嵌套类和封闭类的元素方面有某些限制。

由于在类中的访问说明符Link下声明,因此无法private在类Struct外部进行访问Struct