总之,我的问题是我想找到一种方法来访问迭代器从派生类指向的元素。详情如下。
我正在实现一个带有双链表的序列,参考“C ++中的数据结构和算法”一书(由Goodrich,Tamassia,Mount编写),第255页。本书将NodeSequence类定义为派生类双重链表。
这是代码。首先,我使用struct Node和class Iterator创建了一个双向链表类。 (这保存为“DList.h”)
typedef int E;
class DList {
private:
struct Node {
E element;
Node* prev;
Node* next;
};
public:
class Iterator {
public:
E& operator*();//reference to the element
bool operator==(const Iterator& p) const;
bool operator!=(const Iterator& p) const;
Iterator& operator++();
Iterator& operator--();
friend class DList; //gives access to the DList
private:
Node* v; //pointer to the node
Iterator(Node* u); //create from Node
};
public:
DList();
int size() const;
bool empty() const;
Iterator begin() const;
Iterator end() const;
void insertFront(const E& e);
void insertBack(const E& e);
void insert(const Iterator& p, const E& e);
void eraseFront();
void eraseBack();
void erase(const Iterator& p);
void printList();
private:
int n;
Node* header;
Node* trailer;
};
接下来,我创建了一个名为“NodeSequence”的DList派生类,其定义如下
#include "DList.h"
class NodeSequence : public DList{ //NodeSequence class inherits DList class
public:
Iterator atIndex(int i) const ; //get position from index
int indexOf(const Iterator& p) const; //get index from position
};
最后,我想测试我的代码,所以我演示如下。
int main() {
NodeSequence test;
test.insertBack(5);
test.insertBack(4);
test.insertBack(3);
test.insertBack(2);
test.insertBack(1);
NodeSequence::Iterator p= test.atIndex(1);
cout << (p.v)->element() << endl;
// I expected 4, but it gives compile error, it says I can't access to p.v because it is a private member
}
有没有办法可以访问迭代器的私有元素(它是一个指针)?我不想将Node * v从私有更改为public。