使用重载的*运算符取消引用类

Dereferencing class with overloaded * operator

本文关键字:取消 引用 运算符 重载      更新时间:2023-10-16

我试图创建一个指向重载了*运算符的类的指针,但它返回了另一个值。等级代码:

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

如何使用重载的*运算符生成指针?

这个Node<int>* example;意味着exampleNode<int>上的指针(是的,我是captain Obvious:)。

如果之后将其与*一起使用,则意味着您只是取消了对访问Node<int>的指针的引用。所以,基本上你有这样的东西:

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

我真的不明白你的目标是什么。。。像这样使用指向容器的指针似乎会产生很多间接性。。。

更一般地说,不能在类定义之外重载operator*,因此不能为指针定义它。

只尝试Node<int> example。这会给你一个Node,*example会调用你的操作符,所以它的行为就像一个指针。