类和结构嵌套

时间:2012-03-28 11:07:01

标签: c++ class struct

我对此代码不太清楚

外部是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;
    }
};

我的问题集中在前几行

class Stack {
    struct Link {
        void* data;
        Link* next;
        Link(void* dat, Link* nxt):
        data(dat),next(nxt) {}
    }* head;

class Stackstruct Link之间的关系是什么?

3 个答案:

答案 0 :(得分:6)

LinkStack内声明,因为默认情况下它是private,所以不能在课外使用。

此外,Stack的成员head的类型为Link*

classstruct之间的唯一区别是默认访问级别 - 结构的public和类的private,所以不要让“struct”在上课“迷惑你。除了访问级别之外,它与“在类中声明的类”或“在结构中声明的结构”相同。

答案 1 :(得分:5)

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

由于Linkprivate类的Struct访问说明符下声明,因此无法在类Struct之外访问。

答案 2 :(得分:1)

struct Link在类中是内部声明的(正确的术语是嵌套的)。它只能在类中访问(由于其默认的私有访问器级别)。如果结构被声明为公共结构,则可以使用Stack::Link引用结构。

在这种情况下进行此类声明的原因是只有类的内部方法需要使用链接,struct提供更好的代码组织。但是,只要没有其他类需要访问struct这样的声明就可以提供更好的封装。