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

时间:2013-12-07 17:42:33

标签: c++ operators dereference

我正在尝试创建一个指向具有*运算符重载的类的指针,但它返回另一个值。 班级代码:

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 个答案:

答案 0 :(得分:0)

Node<int>* example;表示exampleNode<int>上的指针(是的,我是队长Obvious :)。

如果您之后使用*,则表示您只是取消引用指向Node<int>的访问权限。所以,基本上你有类似的东西:

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

我真的没有看到你的目标是什么......使用指向这样的容器的指针似乎会产生很多间接......

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

答案 1 :(得分:0)

尝试Node<int> example。这为您提供了一个节点,*example将调用您的运算符 - 因此它的行为类似于指针。