个人构造复数类的问题

时间:2015-06-14 23:35:05

标签: c++ class complex-numbers

我无法弄清楚为什么我的复杂数字类没有正确添加或正是我想要它的工作方式。当我将两个复数加在一起时,我会得到一些非常奇怪的东西。我一直想弄清楚什么是错的,但无法弄明白。我需要保留结构,因为我将把它用于其他目的。

Dim rCell as Range
For each rCell in TSOA.DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible)
    ' Access the cells as
    t.DataBodyRange.Cells(c.Row - t.HeaderRowRange.Row, ColumnNum)
Next

2 个答案:

答案 0 :(得分:4)

您的add成员函数承诺返回ComplexNumber,但事实并非如此。然后,您尝试使用返回值,调用未定义的行为squared同样被打破了。

您需要确定是否希望add实施运营商+=+的行为。在第一种情况下,您需要返回对要修改的对象的引用:

ComplexNumber& add(ComplexNumber c)
{//          ^
  real += c.real;
  imag += c.imag;
  return *this;
}

在第二种情况下,不要修改对象,而是创建一个新对象并将其返回:

ComplexNumber add(ComplexNumber c)
{
  return Complex(real + c.real, imag + c.imag);
}

请注意,在这种情况下,使用非成员函数可能是有意义的。

我建议查看std::complex以获得良好实施的示例。

答案 1 :(得分:0)

如声明,您的添加功能应以:
结束 return ComplexNumber(real,imag);

但这让我感到奇怪 - 它听起来并不像#34;加入",听起来好像是#34;添加args和这个数字并返回一个新的复合体。"您可以稍微澄清一下您的界面。如果"添加"意味着"加入"然后它可能是无效的并且什么都不返回。或者它可能会自行返回,因此您可以在添加之后使用它做更多事情。 (那是什么" + ="确实如此。)如果您正在寻找,那么您将返回ComplexNumber& (对ComplexNumber的引用)以及结束:
return * this;

在任何情况下,为什么编译器在函数没有返回值时不会发出警告?你是否将警告级别设置为"从不警告我"?打开编译器警告。当声明函数有结果时不返回值是一个基本错误,它甚至不应该只是一个警告。