在下面的代碼,我說明運算符重載的例子:爲什麼運算符重載失敗?
#include <iostream>
using namespace std;
template <typename T>
class A
{
public:
A() {};
A(T &obj) {value = obj;};
~A() {};
T value;
template <typename E>
A<T>& operator = (const A<E> &obj)
{
cout<<"equal operator"<<endl;
if(this == &obj)
return *this;
value = obj.value;
return *this;
}
};
int main()
{
int temp;
temp = 3;
A<int> myobjects(temp);
cout<<myobjects.value<<endl;
temp = 7;
A<int> yourobjects(temp);
yourobjects = myobjects;
cout<<yourobjects.value<<endl;
return 0;
}
然而,當我調試這個程序,我發現主程序不會調用等於運算符重載功能。但是,如果我通過以下方式更改相同的運營商:
A<T>& operator = (const A<T> &obj)
{
cout<<"equal operator"<<endl;
if(this == &obj)
return *this;
value = obj.value;
return *this;
}
它會工作。你有什麼想法,爲什麼最初的功能不起作用?
需要注意的是,最好把這種現象稱爲了_assignment_操作。 _equal_運算符是'=='。 – 2012-07-09 17:21:42