2012-07-26 44 views
0
#include <cmath> 
#include <iostream> 
#include <cstdlib> 
using namespace std; 

class myClass { 
    int d; 

public: 

    myClass(){}; 

    int get_rand() const { 
     return rand() % 10; 
    } 
}; 

int operator +(myClass d, myClass e) { 
    return d.get_rand() + e.get_rand(); 
} 

int main() { 
    myClass mC; 
    int sum = mC + mC; 
    cout << sum; 

} 

的人數不詳我希望能有儘可能多的三菱商事的,因爲我想如。 int sum = mC + mC + mC + mC;我怎麼能超載的加號來概括對象

回答

2

你需要重載運算符對於這一點,即int operator+(int, myClass)

int operator +(int d, myClass e) { 
    return d + e.get_rand(); 
} 

+操作進行評估左到右,所以mC + mC類型是int。這就是爲什麼你需要另一個運營商int operator +(int, myClass)

+0

或'MyClass的操作者+(MyClass的,MyClass的)',再加上從'myClass'到'int'的轉化率。 – 2012-07-26 16:52:53

1

提供operator+兩個重載。

int operator +(int d, myClass e) { 
    return d + e.get_rand(); 
} 

int operator +(myClass d, int e) { 
    return d.get_rand() + e; 
} 

或者,您可以提供從myClass轉換到intoperator int()成員,雖然我更喜歡第一個選項。

我也許並不需要一提的是運算符重載應始終非常謹慎進行。

+1

這些不是成員函數,如果它們是這樣定義的。成員函數是'myClass :: operator +(int e){/ * ... * /}'。這些都將被定義爲全局函數,並且可能在類中給出了「朋友」狀態。 – KRyan 2012-07-26 16:53:20

+0

@DragoonWraith是的,我開始打字,然後改變了我的腦海裏,當我看到他已經有一個全球性的'運營商+'。 – pmr 2012-07-26 16:54:23

4

您可以使用操作符重載更改class

class myClass { 
    int d; 

public: 

    myClass(){ d = get_rand(); }; 

    int get_rand() const { 
     return rand() % 10; 
    } 

    myClass operator + (myClass b) const { b.d += d; return b; } 
    operator int() const { return d; } 
}; 

然後你不需要外部operator+了。

+0

Derp,對吧。評論已刪除。 – KRyan 2012-07-26 16:59:17