簡體   English   中英

C ++中的重載運算符

[英]Overloading operators in C++

見最后的編輯

我試圖重載C ++中的+運算符,以允許我添加兩個復數。 (添加實數並添加虛數)。

這是我的重載函數:

ComplexNum operator+(ComplexNum x, ComplexNum y){
ComplexNum result;
result.real = (x.getReal() + y.getReal());
result.imag = (x.getImag() + y.getImag());

return result;
}

我的Complex Number構造函數采用兩個int,並將第一個分配給int real,第二個分配給int imag。

當我嘗試添加它們時:

ComplexNum num1 = ComplexNum(1,1);
    ComplexNum num2 = ComplexNum(2,3);
    ComplexNum num3;
    num3 = num1 + num2;
    printf("%d",num3.getReal());

結果是0。 結果應為3(已添加num1和num2的實數部分)

編輯:我想出了什么問題。 我有.getReal()和.getImage()返回兩倍。

由於operator +的參數被聲明為值,而不是引用,因此它們將通過副本傳遞,因此,如果ComplexNum的副本構造函數不起作用,則可能導致x和y的實部為0。

加法也有可能起作用,但是當您調用num3的賦值運算符時,您會丟失真實的部分。

或者,可能只是打破了getReal()方法。

在我看來,您的復制構造函數或賦值運算符已損壞。 您也可以發布這些代碼嗎?

附帶說明一下:實現operator+的規范方法是在成員operator+=之上作為自由函數。 (對於-=*=等,BTW也是如此。)對於任何類型T,它都應如下所示:

T operator+(const T& lhs, const T& rhs)
{
   T tmp(lhs); 
   tmp += rhs; //invoke +=
   return tmp;
}

該約定的原理(IIRC,Stroustrup歸功於Koenig):

  • ++= (以及--=等)幾乎相同; 為了避免冗余,應在另一個之上實施
  • +=需要更改左操作數,因此它應該是成員; +不理會其參數,因此它應該是一個自由函數
  • 在成員之上實現非成員通常更容易和/或更有效; 這種情況也不例外

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM