c++ - 我的预增量工作正常,但不是后增量
问题描述
我已经实现了以下类,并尝试重载前置和后置增量运算符以及提取“>>”运算符。程序运行良好,直到 'cout << ++num1;' 但打印最后一行 'cout << num1++;' 的垃圾值。我无法弄清楚为什么它对预增量工作正常,但对后增量却不行。
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++;
}
解决方案
您的后增量运算符正在返回对本地对象的引用,该对象将在函数结束时被销毁,返回的引用始终悬空,并且对其取消引用会导致 UB。
后增量运算符应该按值返回,例如
ComplexNumber ComplexNumber::operator++(int x) // postincrement
{
ComplexNumber c = *this;
++(*this);
return c;
}
推荐阅读
- ios - Swift泛型类参数实现另一个参数
- python - 使用字典作为查找表
- linux - 包含需要用户输入和操作主机网络接口的 shell 脚本的 Docker 容器
- angular - 角度 ng-select 并添加事件
- jquery - 如何使用ajax将请求传递给带有参数的symfony控制器?
- perl - 如果文件早于使用 PERL 脚本的给定时间,则从 ftp 删除文件
- python - 内部 python 烧瓶服务器 REST 调用
- python-3.x - 如何在 python 3.x 中打印用户输入
- ios - CollectionViewCell 设置默认位置
- node.js - Nodejs EventLoop(带集群模块)与Golang调度器对比