Взаимодействие с private членами класса через метод, который вызывает обычную функцию

Учусь программировать на языке с++. Наткнулся на типовое задание: создать класс, описывающий простой список и способы взаимодействия с ним. Есть непонятная для меня часть: в этом классе должен быть метод

void visit (void (*pf)(Item&))

принимающий в качестве аргумента указатель на другую функцию. Указатель pf указывает на функцию (не метод), которая принимает ссылку на аргумент типа Item. Вызываемая функция должна например умножить все члены списка на 2, или поделить, неважно.

Вопрос: как это сделать и возможно ли? Ведь обычная функция, в отличии от метода, никак не может взаимодействовать с элементами объекта класса из списка private? Можете помочь написать тело метода visit() и какой-нибудь типовой функции, которую он вызывает, чтобы изменить элементы из массива Item list[MAX]

Сам класс:

typedef double Item
class List
{
private: 
    const static int MAX = 10;
    Item list[MAX];
    int top_list;
public: 
    List();         // конструктор
    bool isEmpty(); 
    bool isFull();
    ...           // еще пара методов
    void visit(void (*pf)(Item&)) // метод, который не понимаю как должен работать
}

Мой метод visit, который естественно не работает, вообще без идей, что можно применить, в рамках моих знаний перепробовал всё...

void List::visit(void (*pf)(Item&))
{
pf(list[i]);
}

И тело функции

void multiply(Item& it)
{
it *= 2;
}

Я не привожу код из main() для тестирования класса, там все работает, кроме описанной мной проблемы. Прошу прощения, если немного косноязычно.


Я не совсем корректно выразился, если мы операцию умножения заменим на сложение или деление - ничего не произойдет. Отсюда делаю вывод, что все-таки что-то не так. Методы есть, полностью код смогу вечером показать если нужно. Через цикл метод visit описывал - работает только функция умножения, другие функции, выполняющие другие математические операции - нет.


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