在許多情況下,這是一個很好的做法。這裏有一個我們實現鏈接列表:
template <class T>
class MyLinkList {
public:
class Node {
public:
Node* next;
T data;
Node(const T& data, Node* node) : next(node), data(data) {}
};
class Iterator {
public:
Node* current;
Iterator(Node* node) : current(node) {}
T& operator*() { return current->data; }
void operator++(int) { current = current->next; }
bool operator!=(int) { return current != NULL; }
};
private:
Node* head;
}
以上僅僅是摘錄的是不打算完整或編譯的。重點是要顯示Node和Iterator是MyLinkList類的內部類。之所以這樣做是有道理的,是爲了傳達這樣一個事實,即Node和Iterator不是獨立的,而是需要由MyLinkList進行限定(例如MyLinkList :: Iterator它)
你能告訴我一個理由節點是公共的,揭露的實施? – 2010-05-24 03:00:17
如果我沒有記錯,如果Node和Iterator是私有的,編譯器可能會導致錯誤,如果它看到像** MyLinkList ::節點**或** MyLinkList :: Iterator它**。我希望傳達一點,Node和Iterator應該只在MyLinkList的上下文中有意義,而不是我自己,我認爲這是問題的實質。 –
2010-05-24 03:20:11