[英]Why in below code return type is class type used for operator overloading?
[英]Why does + operator overloading return type is class type not integer?
在本文中,作者選擇了返回類型為類類型http://www.learncpp.com/cpp-tutorial/92-overloading-the-arithmetic-operators/ 強調文字 ,我們是否可以將返回類型更改為int ,因為我想執行以下操作,所以我嘗試了一下,而且效果很好,為什么作者將返回類型設置為class?
#include <cstdlib>
#include <iostream>
using namespace std;
class Cents // defining new class
{
private:
int m_Cents;
int m_Cents2;
public:
Cents(int Cents=0, int Cents2=0) // default constructor
{
m_Cents=Cents;
m_Cents2=Cents2;
}
Cents(const Cents &c1) {m_Cents = c1.m_Cents;}
friend ostream& operator<<(ostream &out, Cents &c1); //Overloading << operator
friend int operator+(const Cents &c1, const Cents &c2); //Overloading + operator
};
ostream& operator<<(ostream &out, Cents &c1)
{
out << "(" << c1.m_Cents << " , " << c1.m_Cents2 << ")" << endl;
return out;
}
int operator+(const Cents &c1, const Cents &c2)
{
return ((c1.m_Cents + c2.m_Cents) + (c1.m_Cents2 + c2.m_Cents2 ));
}
int main(int argc, char *argv[])
{
Cents cCents(5, 6);
Cents bCents;
bCents = cCents;
cout << bCents << endl;
Cents gCents(cCents + bCents, 3);
cout << gCents << endl;
system ("PAUSE");
return 0;
}
除了許多其他事情,要記住的一件事是,在相同類型的兩個對象之間進行相加的結果始終是非常特定的類型。 因此它可能對您有用,但從邏輯上講這是不正確的。 其次,如果不返回類類型,則無法執行嵌套+
語句。 例如,如果您想這樣做。
Obj1 + Obj2 + Obj3 ;
您將得到一個編譯時錯誤。 原因是+
運算符的重載函數應按相同類類型的值返回結果。 下面編寫的運算符也可以如下編寫用於函數調用。
Obj1 + Obj2 ;
相當於...
Obj1.operator+(Obj2) ;
對於嵌套加法運算,您可以采用這種方式。
Obj1 + Obj2 + Obj3 ;
相當於...
(Obj1.operator+(Obj2)).operator+(Obj3) ;
|---------------------|
在這里,這部分...
(Obj1.operator+(Obj2))
成為另一個臨時類對象,使用Obj3
作為參數調用下一個方法。 因此,如果不從+
函數返回類對象,則此部分將是int
而不是對象。 +
函數不會在該int或任何其他非類數據類型上調用。 這樣會給你一個錯誤。
簡而言之,建議始終從重載+
函數中按值返回對象。
通常,加法的語義是當您添加給定類型的兩個對象時,您期望結果對象具有相同的類型。
沒有理由您不能做自己想做的事,但這是非標准加法語義的一個例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.