簡體   English   中英

使用構造函數自動轉換

[英]automatic conversion using a constructor

我有這兩個課程:

     class iterator {
     public:
            Node<K,V>* n;
            iterator():n(NULL){}
            iterator(const iterator& iter):n(iter.n){}
            explicit iterator(Node<K,V>* nodePtr):n(nodePtr) {}
            void 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;
    };
    //----const_iterator-class---------------------------


    class const_iterator : public iterator {
    public:
            const Node<K,V>* n;
            const_iterator():n(NULL);
            const_iterator(const const_iterator& iter):n(iter.n){}
            const_iterator(const iterator& iter):n(iter.n){}
            explicit const_iterator(const Node<K,V>* node):n(node){}
            void operator=(const const_iterator& iter){
                    n=iter.n;
            }
            void operator++(){
                    n = n->next;
            }
    };

我想自動將iterator轉換為const_iterator ,以防方法將錯誤的類型用作參數。 我正在嘗試使用:

 const_iterator(iterator& iter):n(iter.n){}

從iterator轉換為const_iterator后,嘗試訪問iter.n(n指向的值)中的內容時,為什么會出現分段錯誤?

m.begin()和.end可能會返回一個臨時值?

所以你需要的是

class const_iterator {
public:
    const_iterator(const iterator &iter) {}
};

這是演示這種轉換的代碼:

#include <iostream>

class iterator {
     public:
        iterator() { i = -1; }
        int i;
        void bar() const { std::cout << "iterator::bar() " << i << std::endl; }
};

class const_iterator : public iterator {
public:
        const_iterator(int ii) : i(ii) {}
        const_iterator(const iterator &it) : i(it.i) {}
        const int i;
        void bar() const { std::cout << "const_iterator::bar() " << i << std::endl; }
};

void foo(const const_iterator &it) {
        it.bar();
}

int main() {
        iterator it;
        it.i = 777;
        foo(it);
        return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM