我正在尝试重载<<检测溢出操作的New Integer类的运算符是我的代码部分:
class NewInteger{
private:
int num;
public:
NewInteger();
NewInteger(int);
friend std::ostream &operator <<(std::ostream& out, const NewInteger& rhs);
NewInteger operator+ (NewInteger);
.../ many other member functions/
}
实施是:
NewInteger NewInteger::operator+(NewInteger n)
{
int a = this->getValue();
int b = n.getValue();
if (a > 0 && b > max - a) {
throw std::exception();
std::cout << "studpid" << std::endl;
}
if (a < 0 && b < min - a) {
throw std::exception();
}
return NewInteger(a + b);
}
std::ostream & operator<<(std::ostream & out, const NewInteger& rhs)
{
out << rhs;
return out;
}
在main.cpp中,我尝试运行:
来测试代码 NewInteger n7(4);
NewInteger n8(5);
std::cout << n7.operator+(n8) << std::endl;
代码构建正常,当我在Visual Studio 2015上运行它时,它会导致程序关闭而不会产生致命错误。所以当我调试代码时,它给了我:`
Exception thrown at 0x00C43B49 in NewInteger.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00192F90)
并且断点出现在运算符&lt;&lt;的实现处。但我无法弄清楚我应该尝试在实现中捕获什么异常。
有人可以告诉我这是什么原因?
答案 0 :(得分:4)
std::ostream & operator<<(std::ostream & out, const NewInteger& rhs)
{
out << rhs;
return out;
}
第一行在operator<<
和out
上调用rhs
- 这是您正在定义的功能。你有无限的递归。