继承,使基本成员变量const

Inheritance, make base member variable const

本文关键字:成员 变量 const 继承      更新时间:2023-10-16

假设我有以下类:

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;
};

我想使用继承实现常数。我知道基本成员在C 中是不可能的。我如何继承迭代器。映射,但在const_iterator中使其稳定?

以斯拉的评论是正确的。公共继承应意味着is-a关系,但是在这种情况下,常数不是迭代器。

一旦考虑一下,这很容易:例如,迭代器允许修改其指向数据,但是constant_iterator却不能,因此您不能在任何可以通过迭代器的地方传递constant_iterator。

因此您不应使用公共继承。


如果要重复使用代码(一个很好的目标),则可以通过私人继承或组成来实现这一目标。但是,您应该注意,您可以从未继承iterator::map,因为它是一个私人变量!您永远无法继承私人变量。如果需要,您可以为地图包含一个受保护的getter功能。

发布埃兹拉评论:

您可以使用私人继承,该继承应掩盖使用该类的任何人的继承,并且您可以通过const成员函数

提供基本成员的访问权限