【问题标题】:Overloading operators * and ->重载运算符 * 和 ->
【发布时间】:2014-08-15 20:14:47
【问题描述】:

我试图为一个简单的类重载取消引用运算符 (*) 和 (->)。

class Base
{
private:
    int i;
    int j;

public:
    Base(int i): i(i), j(i), k(90) { }

    void print() 
    { 
        cout << i << j << endl; 
    }

    Base &operator*(void)
    {
        cout << "inside * operator" << endl;

        return *this;

    }

    Base *operator->(void)
    {
        cout << "inside -> operator" << endl;

        return this;
    }
};

int main()
{
    Base *b = new Base(100);

    int j = b->k;

    int l = (*b).k;

    cout << j << l<< endl;

    return 0;
}

这里重载的操作符-&gt; 没有被调用。但是当我使用int j = (*b)-&gt;k 时,会调用重载运算符-&gt;

我不明白为什么会这样?而且我根本无法调用重载的operator*。我知道我们重载这些运算符主要是为了智能指针,但我在这里没有得到原因。有什么帮助???

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

    b 是一个指针。您应用于b-&gt;* 运算符取消引用指针,而不是它指向的东西。此外,该语言不允许您为指针类型重载这些运算符。

    【讨论】:

      【解决方案2】:

      重载的*-&gt; 运算符仅在运算符的左侧是Base 类型的对象时使用,但在上面的示例中,运算符的左侧是Base* 类型的指针。要调用operator*operator -&gt;,您需要使用实际的具体Base 对象。例如:

      Base b{100};
      *b = ...
      b->...
      

      希望这会有所帮助!

      【讨论】:

      • +1:我很惭愧地说,我个人不得不使用Qt,然后才知道为什么会这样。
      猜你喜欢
      • 2016-02-19
      • 2012-11-26
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多