2012-11-20 130 views
0

我試圖做一些我不完全確定的事情甚至是可能的。我試圖重載一個等於操作是這樣的:C++運算符重載類和結構

Class A //Defined somewhere 
Struct B{ 
    float bobsAge; 
}; 
B& operator=(A,B){ 
    A.GetAge("bob",B.bobsAge); 

    return B; 
} 

Function(getAge){ 
    A Names; 
    B structNames; 

    structNames = Names; 
} 

我明白,這也許是不可能的,因爲據我所知,運營商=是用來做的事情,如設置相同的類型相同的一個對象到另一個對象。或者這是可能的,但我做錯了什麼。

提前致謝。

回答

1

你所試圖做的是重載賦值運算符然而,標準的做法是提供一個轉換構造函數:

class A 
{ 
public: 
    A(const B& b) { GetAge("bob", b.bobsAge; } 
}; 

然後讓在隱式轉換踢的表達式,如

A a; 
B b; 
a = b; // Assignment: calls A(const B&), and uses A's default assignment operator 
A a2 = b; // Construction: calls A(const B&) and A(const A&) 

你可以提供了一個賦值運算符

A& operator=(const B&); 

但是,只允許從BA,而不是構造賦值,這似乎很不直觀。

2

您可以重載operator=但它必須在課堂上。有關類定義之外的內容,請參閱http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

例如

class foo { 
    foo& operator=(B b) { 
    //... 
    return *this; 
    }; 
}; 

雖然我不完全確定你想要做什麼。

另外,它是賦值運算符 - 不要將其稱爲等號運算符。

3

operator=是一個賦值運算符,只能被覆蓋裏面的被分配給的類。所以在你的情況下,它將不得不在A內宣佈。

「等於運算符」,即operator==,用於比較兩個對象是否相等。