
16.06.2007, 16:00
|
|
Познающий
Регистрация: 22.10.2005
Сообщений: 37
С нами:
10816148
Репутация:
141
|
|
2 ZaCo
Ну тогда уж не operator int(), а operator aType(), но в любом случае это - не то  . Этот оператор преобразует оба операнда к типу aType (в данном случае - int), и сравнивает их как инты. А если в классе не одно поле (например, рац числа над типом int), то приведение к инту даст лажу (можно приводить в частном случае к флоату, но в общем шаблонном случае непонятно к чему приводить).
Убедиться, что оператор сравнения в классе testClass lдействительно не вызывается просто, достаточно добавить туда cout:
Код:
#include <iostream>
using namespace std;
template <class aType>
class testClass{
public:
aType data;
testClass(aType c): data(c) {}
bool friend operator==<aType>(testClass<aType>, testClass<aType>);
operator aType(){
return data;
}
};
template <class aType>
bool operator==(testClass<aType> a, testClass<aType> b){
cout << "Operator == exucuted\n";
return a.data==b.data;
}
int main(){
int a=4;
testClass<int> b(4);
if (a==b) cout << "a equals b\n";
if (b==a) cout << "b equals a\n";
}
Этот код не выведет фразу "Operator == exucuted" ни разу
|
|
|