一、问题
之前敲运算符重载没有遇到什么问题,今天唯独今天敲++重载的时候,出现了以下错误:


无参有参的构造函数均写了,这样写也可以通过:

二、解决方法
我发现,++运算符之所以会报错,是因为他和前面的运算符,如+,-,有一个质的区别:
根据参数的顺序,运算结果会有所差别。
比如,当你只写一个++a的函数时,
那么系统无法识别你到底是++a还是a++。
于是,我把两个分别写完了:
Person& operator++()
{
this->age++;
return *this;
}
Person& operator++(int)
{
Person temp = *this;
this->age++;
return temp;
}
再运算,就没有任何问题了。
然而,注释掉上述两段代码中的任意一个,程序都会报错。
三、总结
遇到和顺序有关的运算符,如果需要重载,一定要把每一个类别写清楚。
本文介绍了在C++中遇到++运算符重载时出现错误的问题,解析了原因并提供了解决方案。作者指出,由于++运算符的前缀和后缀形式导致了歧义,需要分别定义无参和有参的重载版本。通过完整实现这两个函数,问题得以解决。同时,文章强调了对于顺序敏感的运算符重载,必须明确区分所有可能的形式。
1086

被折叠的 条评论
为什么被折叠?



