c ++指针:重载运算符++

时间:2014-06-03 21:35:22

标签: c++ operator-overloading

我尝试找到有关重载operator ++ for pointer的任何内容,但没有结果。

有我的代码。

struct Item
{
    int amount;
    Item(int a){ this->amount = a; };
    Item& operator++()
    { 
       this->amount++; 
       return *this;
    };
};


int main()
{

    Item *I = new Item(5);

    ++*I;

    return 0;
}

是否有任何选项只能在主函数中编写

++I;

(抱歉我的英文)

3 个答案:

答案 0 :(得分:6)

不要使用指针(无论如何都不需要它):

Item I(5);
++I;

答案 1 :(得分:2)

您可以手动编写(如果您真的想使用指针)

I->operator++();

答案 2 :(得分:1)

不,你不能为指针类型重载运算符。

定义自己的operator++时,函数的第一个参数必须是 class - enumeration-type ,如[over.inc]p1中所指定在C ++标准中:

  

名为operator++的用户定义函数实现了前缀和后缀++运算符。如果此函数是没有参数的成员函数,或者是具有类或枚举类型的一个参数的非成员函数,则它为该类型的对象定义前缀增量运算符++


但我真的很想打operator++而不必明确写*ptr ...

你可以,但它不是最漂亮的代码行:

ptr->operator++ (); // call member function `operator++`

注意:考虑仅使用Item *I = new Item (5); ++*I,而不是Item I (5); ++I,不需要在代码段中使用指针。