在程序设计基础这本书中写的是:
后置自增表达式 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下也会警告,是编译器的问题吗
黄舟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;
}