Разыменование класса с перегруженным * оператором

Я пытаюсь создать указатель на класс с перегруженным оператором *, но он возвращает другое значение. Код класса:

template<class T> class Node
{
public:
    T *pointer;

    T& operator*()
    {
        return *pointer;
    }
}

Тогда этот код не работает, возвращая int вместо указателя:

Node<int>* examplePointer;      //this works
Node<int> example;            //creates an instance of Node<T> class
examplePointer = *example;           //this doesn't work

Как сделать указатели с перегруженным * оператором?

2 ответа

Попробуй просто Node<int> example, Это дает вам узел, и *example позвонит ваш оператор - так он ведет себя как указатель.

Это Node<int>* example; Значит это example указатель на Node<int> (да, я капитан Очевидность:)).

Если вы используете его потом с *это означает, что вы просто разыменовываете указатель для доступа к Node<int>, Итак, в основном у вас есть что-то вроде:

*example; // Just a pointer dereference expression type 
          // is something like Node<int>
**example; // something like:  example->operator*();

Я не очень понимаю, какова ваша цель... Использование указателя на контейнер, как это, кажется, создает много косвенных...

И вообще, вы не можете перегрузить operator* вне определения класса, поэтому вы не можете определить его для указателя.

Другие вопросы по тегам