首頁  >  問答  >  主體

关于C++类中++的运算符重载问题,后置自增表达式不行?

在程序设计基础这本书中写的是:
后置自增表达式 Aobject++
成员函数重载的解释为

Aobject.operator++(0)

其中0是一个伪值

#include<iostream>
using namespace std;
class complex
{
    private:
        double real;                                    //实部 
        double imag;                                    //虚部 
    public:
        complex &operator ++();
        friend void output(complex &c);
        friend void intput(complex &c);
};
complex &complex::operator++ ()
{
    real=real+1;
    imag=imag+1;
}
void output(complex &c)
{
    cout<<"c++="<<"("<<c.real<<","<<c.imag<<"i)";
}

void intput(complex &c)
{
    cin>>c.real>>c.imag;
}

int main()
{
    complex c;
    intput(c);
    c++;
    output(c);
    
}

在这段代码编译时会提示:
[Error] no 'operator++(int)' declared for postfix '++' [-fpermissive]
编译器是DEVC++,在vs2010下也会警告,是编译器的问题吗

巴扎黑巴扎黑2765 天前688

全部回覆(2)我來回復

  • PHPz

    PHPz2017-04-17 13:37:01

    雷雷

    回覆
    0
  • 黄舟

    黄舟2017-04-17 13:37:01

    complex &operator ++();

    你這句是前置++運算子的重載
    C++後置++運算子的重載宣告可以在()裡面加個int來實現,即:

     complex operator ++(int);    //后置++,返回值不是引用类型

    另外,你的重載運算子也沒有return語句,main函式也沒return 0;
    最好是拷貝建構函式、拷貝賦值運算子都實作下。

    complex & operator = (const complex &c)
    {
        real = c.real;
        imag = c.imag;
        return *this;
    }
    complex complex::operator++ (int)    //后置++
    {
        auto ret = *this;
        real = real + 1;
        imag = imag + 1;
        return ret;
    }

    回覆
    0
  • 取消回覆