重载运算符*和 - >

时间:2014-08-15 20:14:48

标签: c++ operator-overloading

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

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;
}

此处不会调用重载的运算符->。但是当我使用int j = (*b)->k时,会调用重载的运算符->

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

2 个答案:

答案 0 :(得分:3)

b是一个指针。您要应用于->的{​​{1}}和*运算符取消引用指针,而不是指向它的内容。此外,该语言不允许您为指针类型重载这些运算符。

答案 1 :(得分:2)

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

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

希望这有帮助!