Перегрузка операнда ++

115
21 апреля 2022, 11:10

Необходимо перегрузить операцию ++ как движение по списку. В чём ошибка?

template <class M>
    Node<M>* operator ++ (Node<M> &p)
    {
        p = p->next;
        return p;
    }
    
    int main()
    {
    
        Node<int>* pbeg = first(15);
        Node<int>* pend = pbeg;
        add(&pend, 2);
        add(&pend, 3);
        Node<int>* pv = pbeg;
        cout << pv->data << '\t';
        ++pv;
        cout << pv->data << '\t';
Answer 1

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

Node* operator++()
{
    this = next; 
    return next;
}

а это не верно. this это prvalue (9.3.2)стандарта и ему нельзя ничего присваивать. Подробнее про prvalue можно прочитать здесь.

А если нужно сделать объект который бы указывал на ваш Node<M> и для которого был бы переопределен оператор ++, то нужно сделать отдельный класс для этого, как это сделано в стандартной библиотеке С++, там есть std::iterator

READ ALSO
почувствовать разницу inline и не inline метода

почувствовать разницу inline и не inline метода

подскажите, а как мне изменить тела конструкторов классов A и B, чтобы почувствовать разницу по производительности inline и не inline функций ??? или...

114
перегрузка оператор() через оператор[][] на c++ [дубликат]

перегрузка оператор() через оператор[][] на c++ [дубликат]

нужно так чтобы data[5][5] код выводил как data(5,5) и как результат выдавал произведение ixj, те

108
Гауссовский фильтр C++

Гауссовский фильтр C++

Написал программу, которая применяет фильтр Гаусса на зашумленное одноканальное изображениеПроблема в том, что на выходе оно получается...

100
Sql запрос и обработка на php

Sql запрос и обработка на php

Имеется 3 табличкиЗадание, типы заданий (категории грубо, их может быть несколько к одному заданию) и связывающая их табличка

191