c++ - 继承,使基成员变量为const

标签 c++

假设我有以下类(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/

相关文章:

c++ - OpenMP 积分图像比顺序图像慢

c++ - 使用声明对两个完全相同名称的名称查找的影响

Java 在 C++ 中的 "public static final Object"

c++ - 接口(interface)名称(eth0 等)的等效 inet_addr C/C++、Linux

c++ - 隐式转换运算符重载语法

c++ - 大数组指针删除

c++ - 如何从 vector 类派生

C++ Mersenne Twister 和随机数库

c++ - 使用 C++ 删除 WMI 实例

c++ - 在虚拟继承中交换和复制成语的正确方法是什么?