我对此代码不太清楚
外部是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 Stack
和struct Link
之间的关系是什么?
答案 0 :(得分:6)
Link
在Stack
内声明,因为默认情况下它是private
,所以不能在课外使用。
此外,Stack
的成员head
的类型为Link*
。
class
和struct
之间的唯一区别是默认访问级别 - 结构的public
和类的private
,所以不要让“struct”在上课“迷惑你。除了访问级别之外,它与“在类中声明的类”或“在结构中声明的结构”相同。
答案 1 :(得分:5)
班级Stack
和结构Link
nested 。
请注意,嵌套类在访问嵌套类和封闭类的元素方面存在某些限制。
由于Link
在private
类的Struct
访问说明符下声明,因此无法在类Struct
之外访问。
答案 2 :(得分:1)
struct Link
在类中是内部声明的(正确的术语是嵌套的)。它只能在类中访问(由于其默认的私有访问器级别)。如果结构被声明为公共结构,则可以使用Stack::Link
引用结构。
在这种情况下进行此类声明的原因是只有类的内部方法需要使用链接,struct
提供更好的代码组织。但是,只要没有其他类需要访问struct
这样的声明就可以提供更好的封装。