gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:10:12 26 4
gpt4 key购买 nike

我有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com