Récemment, en classe, nous avons appris que l'itérateur STL devait traverser des listes. Dans l'exemple de code donné pour un Iterator de base pour une liste chaînée, je suis tombé sur quelque chose que je ne comprenais pas.Présentation de la classe d'itération en C++
Nous avons reçu 2 classes Iterator, const_iterator et itérateur. Ils étaient les deux sous-classes de la classe List. itérateur hérité de const_iterator. Dans le constructeur de l'itérateur je ne sais pas pourquoi il a été écrit comme ça;
classe iterator:
class iterator:public const_iterator{
friend sortedList
protected:
iterator(Node* n):const_iterator(n){}
public:
iterator(){
n = nullptr;
}
La classe const_iterator:
class const_iterator {
friend SortedList
protected:
Node* curr_;
const_iterator(Node* n){
curr_ = n;
}
public:
const_iterator(){
curr_ = nullptr;
}
Ma question est pourquoi iterator héritera de const_iterator et pourquoi le constructeur de iterator initialise la cteur de const_iterator et ne rien faire pour lui-même.
Question secondaire; en accédant à Curr_ de l'itérateur, comment je me référerais à cela? Est-ce que j'appellerais simplement curr_ ou est-ce que j'utiliserais ceci-> curr_?
Ce n'est pas un code de bibliothèque standard. Pour le comprendre, nous aurions besoin de voir beaucoup plus de la mise en œuvre que vous demandez. –
Quoi qu'il en soit, le ctor par défaut dans 'iterator' semble cassé. – Deduplicator
Vous pouvez jeter un oeil à https://stackoverflow.com/questions/2844466/can-iterator-type-just-subclass-const-iterator qui peut vous aider à comprendre la logique entre hériter de const_iterator. Personnellement, je n'aime pas cette façon de procéder, car l'héritage public de l'OMI devrait être utilisé pour transmettre une information «publique» (c'est-à-dire un modèle pour des objets qui seront utilisés polymorphiquement), ce qui n'est pas le cas ici. –