Как правильно унаследовать функции класса?
Есть 2 класса с практически идентичными функциями. Не могу разобраться, как правильно сделать наследование.
class ListIterator {
private:
node *data_;
public:
ListIterator() noexcept : data_(nullptr) {};
ListIterator(const ListIterator &other) noexcept : data_(other.data_) {}
~ListIterator() noexcept {}
ListIterator(node *pointer) noexcept {
data_ = pointer;
}
reference operator*() {
CheckNull();
return data_->value_;
}
ListIterator &operator++() {
CheckNull();
data_ = data_->next;
return *this;
}
ListIterator &operator--() {
CheckNull();
data_ = data_->prev;
return *this;
}
bool operator==(const ListIterator &it) const {
CheckNull();
it.CheckNull();
return data_ == it.data_;
}
bool operator!=(const ListIterator &it) const {
CheckNull();
it.CheckNull();
return data_ != it.data_;
}
node *get_data() const {
CheckNull();
return data_;
}
private:
void CheckNull() const {
if (data_ == nullptr) {
throw(std::out_of_range("Iterator is at nullptr"));
}
}
};
class ListConstIterator : public ListIterator {
private:
node *data_;
public:
ListConstIterator() noexcept : data_(nullptr) {};
ListConstIterator(const ListConstIterator &other) noexcept : data_(other.data_) {}
~ListConstIterator() noexcept {}
ListConstIterator(node *pointer) noexcept {
data_ = pointer;
}
const_reference operator*() const {
if (data_ == nullptr) {
throw(std::out_of_range("Iterator is at nullptr"));
}
return data_->value_;
}
};
using iterator = ListIterator;
using const_iterator = ListConstIterator;
iterator begin() noexcept {
return iterator(empty_node->next);
}
iterator end() noexcept {
return iterator(empty_node);
}
Сейчас я просто перенёс все функции из ListConstIterator в ListIterator. Но можно ли сделать наследование class ListIterator : public ConstListIterator и убрать из ListIterator все функции перегруженных операторов, но при этом, чтобы оно брало эти функции из унаследованного класса.
UPD. Ну вот так вот я делал изначально. Но как мне в этом случае создать объект const_iterator? Если пытаюсь, пишет, что нет соответствующего конструктора.