【问题标题】:Dereferencing class with overloaded * operator使用重载的 * 运算符取消引用类
【发布时间】:2013-12-25 00:25:08
【问题描述】:

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

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

如何使用重载的 * 运算符创建指针?

【问题讨论】:

  • 您必须在某处定义一个 T 以便 Node&lt;T&gt;* examplePointer 编译。你能发布一个带有可疑作业的小例子吗?
  • 这只是一个错字。正如我所说,这已经通过为指针创建额外的运算符来解决。
  • 您希望examplePointer = *example 做什么? int x = *example 可以正常工作,examplePointer = &amp;example 也可以。
  • 我希望examplePointer 指向Node&lt;int&gt;
  • 你返回一个 int&,但期望它是一个指针?

标签: c++ operators dereference


【解决方案1】:

试试Node&lt;int&gt; example。这会给你一个节点,*example 会调用你的操作符——所以它的行为就像一个指针。

【讨论】:

    【解决方案2】:

    这个Node&lt;int&gt;* example; 表示exampleNode&lt;int&gt; 上的一个指针(是的,我是队长Obvious :))。

    如果您之后将它与* 一起使用,那确实意味着您只是取消引用指向Node&lt;int&gt; 的访问指针。所以,基本上你有类似的东西:

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

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

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

    【讨论】:

    • Node&lt;int&gt;* example; 应该创建一个指向 Node&lt;T&gt; 的指针,但它只是使用重载运算符并使 example 成为 int
    • @chris710 Node&lt;int&gt;* example 确实声明了一个指向 Node&lt;int&gt; 的指针并且不使用重载运算符。这是一个示例:ideone.com/jZPtZM
    • 好的,但是在exampleVector.push_back(*exampleNode);等其他情况下如何制作指针?
    • 首先,为什么要指针?你是 Node&lt;T&gt; 已经是指针的包装器。其次,我需要一些类型签名来理解你想要什么。 exampleVectorstd::vector&lt;Node&lt;T&gt;&gt; 吗?
    • @chris710 抱歉,我忘了在之前的评论中提及你的名字以警告你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多