Показать сообщение отдельно

  #10  
Старый 16.06.2007, 16:00
pch
Познающий
Регистрация: 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" ни разу
 
Ответить с цитированием