Перегрузка оператора [] для LinkedList C++

Всем привет, дали задание перегрузить оператор [] для списка, т.е. при написании:

std::cout << list[1] << std::endl;

будет выводится первый элемент из списка.

// list.h
#pragma once
class Node {
public:
    int data;
    Node* next;
    Node();
    Node(int);
};

class List {
private:
    Node* head;
public:
    List();
    void add(int);
    void print();
    void getIndex(size_t);
    
}; 

int operator[] (const int index);

Реализация перегрузки должна проходить через getIndex().


Реализация list.cpp

#include <iostream>
#include "list.h"


Node::Node() : data{ 0 }, next{ NULL } { }

Node::Node(int d) : data{ d }, next{ NULL } { }

List::List() : head{ NULL } { }

void List::add(int data) {
    if (head == NULL) {  // empty list - first node
        head = new Node(data);
    }
    else {
        // looking for end (last node has NULL for next):
        Node* tmp = head;
        while (tmp->next != NULL) {
            tmp = tmp->next;
        }
        tmp->next = new Node(data);
    }
}

void List::print() {
    if (head == NULL) {  // empty list
        std::cout << "empty list\n";
    }
    else {
        Node* tmp = head;
        while (tmp != NULL) {
            std::cout << tmp->data << " ";
            tmp = tmp->next;
        }
        std::cout << "\n";
    }
}

void List::getIndex(size_t index) {
    Node* tmp = head;
    for (int i = 1; i <= index; i++)
    {
        tmp->data;
        if (i == index)
        {
            std::cout << tmp->data << std::endl;
            
        }
        if ((tmp->data) == NULL)
        {
            std::cout << -1 << std::endl;
            break;
        }
            tmp = tmp->next;
    }
}

int operator[] (const int index)
{
    return this->getIndex(index);

}

Главный файл

#include <iostream>
#include "list.h"

int main()
{
    std::cout << "Linked List!\n";
    List list;      // create (empty) list
    list.print();
    list.add(10);
    list.add(20);
    list.add(15);
    list.print();
    std::cout << std::endl;
    list.getIndex(1);
    list.getIndex(2);
}

Помогите разобраться как будет правильно перегрузить этот оператор


Ответы (0 шт):