假设我有以下类(class):
class iterator {
private:
Node<KeyType, DataType>* current;
Map<KeyType, DataType>* map;
public:
//C'tor
iterator() :
current(NULL), map(NULL) {}
iterator(Map<KeyType, DataType>* mapPtr, Node<KeyType, DataType>* nodePtr):
current(nodePtr), map(mapPtr) {}
iterator(Map<KeyType, DataType>::const_iterator& sIterator):
current(sIterator.current), map(sIterator.map) {
}
iterator& operator=(const iterator& sIterator);
iterator& operator++();
iterator operator++(int);
bool operator==(const iterator& sIterator) const;
bool operator!=(const iterator& sIterator) const;
const Pair<KeyType,DataType> operator*() const;
const KeyType& getKey() const;
DataType& getData();
friend class Map;
};
我想使用继承来实现一个 constant_iterator。 我知道在 C++ 中基本成员覆盖是不可能的。 如何继承 iterator.map 但使其在 const_iterator 中保持不变?
最佳答案
以斯拉的评论是正确的。公共(public)继承应该意味着 is-a
关系,但在这种情况下,constant_iterator 不是迭代器。
一旦你想到它就很容易:例如,迭代器允许修改它指向的数据,但 constant_iterator 不允许,因此你不能在任何可以传递迭代器的地方传递 constant_iterator。
所以你不应该使用公共(public)继承。
如果你想重用代码(一个伟大的目标),你可以通过私有(private)继承或组合来实现。但是,您应该注意,您永远不能继承iterator::map
,因为它是一个私有(private)变量!您永远不能继承私有(private)变量。如果需要,您可以为 map 包含一个 protected getter 函数。
关于c++ - 继承,使基成员变量为const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21355315/