我的预增量工作正常但不是 post 增量
My pre increment is working fine but not the post increment
我已经实现了以下 class 并尝试重载前置和 post-增量运算符以及提取“>>”运算符。程序在 'cout << ++num1;' 之前运行良好,但在最后一行 'cout << num1++;' 打印垃圾值。我不明白为什么预增量工作正常
但不适用于 post-increment.
class ComplexNumber
{
private:
float real;
float img;
public:
ComplexNumber();
ComplexNumber(float, float);
ComplexNumber(const ComplexNumber& cn);
friend istream& operator>>(istream& in, ComplexNumber& cn);
// cin >> complexNo1 >> complexNo2;
friend ostream& operator<<(ostream& out, const ComplexNumber& cn);
//cout << complexNo1 << complexNo2; //3+4i, 5+10i
ComplexNumber& operator++(int);
//post increment operator. complexNo++;
ComplexNumber& operator++();
//pre increment operator. ++complexNo;
ComplexNumber& ComplexNumber::operator++(int x) // postincrement
{
ComplexNumber c = *this;
++(*this);
return c;
}
ComplexNumber& ComplexNumber::operator++() // preincrement
{
real++;
img++;
return *this;
}
int main()
{
ComplexNumber num1;//,num2,num3
cin >> num1;
cout << "-------------------------------------------" << endl;
cout << "Complex Number is : ";
cout << num1;
cout << ++num1;
cout << num1++;
}
您的 post-increment 运算符是对本地对象的 returning 引用,该对象将在函数结束时被销毁,returned 引用始终悬空并取消引用它导致到 UB。
Post-增量运算符应该return-by-value,例如
ComplexNumber ComplexNumber::operator++(int x) // postincrement
{
ComplexNumber c = *this;
++(*this);
return c;
}
我已经实现了以下 class 并尝试重载前置和 post-增量运算符以及提取“>>”运算符。程序在 'cout << ++num1;' 之前运行良好,但在最后一行 'cout << num1++;' 打印垃圾值。我不明白为什么预增量工作正常 但不适用于 post-increment.
class ComplexNumber
{
private:
float real;
float img;
public:
ComplexNumber();
ComplexNumber(float, float);
ComplexNumber(const ComplexNumber& cn);
friend istream& operator>>(istream& in, ComplexNumber& cn);
// cin >> complexNo1 >> complexNo2;
friend ostream& operator<<(ostream& out, const ComplexNumber& cn);
//cout << complexNo1 << complexNo2; //3+4i, 5+10i
ComplexNumber& operator++(int);
//post increment operator. complexNo++;
ComplexNumber& operator++();
//pre increment operator. ++complexNo;
ComplexNumber& ComplexNumber::operator++(int x) // postincrement
{
ComplexNumber c = *this;
++(*this);
return c;
}
ComplexNumber& ComplexNumber::operator++() // preincrement
{
real++;
img++;
return *this;
}
int main()
{
ComplexNumber num1;//,num2,num3
cin >> num1;
cout << "-------------------------------------------" << endl;
cout << "Complex Number is : ";
cout << num1;
cout << ++num1;
cout << num1++;
}
您的 post-increment 运算符是对本地对象的 returning 引用,该对象将在函数结束时被销毁,returned 引用始终悬空并取消引用它导致到 UB。
Post-增量运算符应该return-by-value,例如
ComplexNumber ComplexNumber::operator++(int x) // postincrement
{
ComplexNumber c = *this;
++(*this);
return c;
}