c++ - 类的构造函数和转换

标签 c++ class constructor

我有 2 个类:

class iterator {
    Node<K,V>* n;
public:
    iterator(){
        std::cout<<"new empty iterator"<<std::endl;
    };
    iterator(const iterator& iter):n(iter.n){
        std::cout<<"copy iterator"<<std::endl;
    }
    explicit iterator(Node<K,V>* nodePtr):n(nodePtr) {
        std::cout<<"create iterator with Node Ptr"<<std::endl;
    }
    iterator& operator=(const iterator& iter);
    void operator++();
    Node<K,V>& operator*();
    bool operator!=(const iterator& iter);
    K& operator[](const Key& k)const;
    V& operator[](const Val& v)const;
    Node<K,V>* getNodePtr()const{
        std::cout<<"get Node Ptr"<<std::endl;
        return n;
    }
    friend class Map;
};

class const_iterator :public iterator {
    const Node<K,V>* n;
public:
    const_iterator(){
        std::cout<<"new empty const_iterator"<<std::endl;
    };
    const_iterator(const iterator& iter):
        n(iter.getNodePtr()){
        std::cout<<"convert"<<std::endl;
    }
    const_iterator(const const_iterator& iter):n(iter.n){}
    explicit const_iterator(const Node<K,V>* node):n(node){}
    const_iterator& operator=(const const_iterator& iter){
        n = iter.n;
        return *this;
    }
    const Node<K,V>& operator*(){
        return *n;
    }
    friend class Map;
};

iterator begin()const{
    return iterator(firstKey);
}
iterator end()const{
    return iterator(dummyKey);
}

我希望它使用以下方法在两个类之间进行自动转换:

    const_iterator(const iterator& iter):
        n(iter.getNodePtr()){
        std::cout<<"convert"<<std::endl;
    }

例如做这样的事情:

 Map<int,int>::const_iterator it = m.begin();

现在,问题是,这个构造函数出于某种原因调用了 iterator();在头等舱,我不明白为什么。 我知道 begin() 和 end() 有一些标准版本,但我不能在这里使用任何一个。我也不能让 Map 成为 const,或者写一个转换函数。 有帮助吗?

最佳答案

您已经将 iterator 设为 const_iterator 的基类,因此 iterator 构造函数将(并且应该)作为构造的一部分被调用一个 const_iterator

关于c++ - 类的构造函数和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21115309/

相关文章:

java - 检测传递给构造函数的给定对象中的当前注释

c++ -/gs 选项导致程序抛出异常

c++ - 如何声明一个模板的模板(一个类)

java - Jaws Wordnet 的编译问题

javascript - 没有 new 的 JS Power Constructor 和 instanceof

java - 对 Java 中对象和属性的基本误解

c++ - 原始 unique_ptr 被销毁后,unique_ptr<T>::get() 返回的指针不是 nullptr

c++ - 验证功能

c# - 与类字段同名的参数会导致问题吗? C#

c++ - 从一副牌发牌(不重复的牌)