迷惑不解? 类模板的问题?编译器如何区分两个class?
1 对于函数模板
#include <iostream.h>
template<class T> T compare_values(T a, T b)
{
return((a > b) ? a: b);
}
float compare_values(float a, float b);
int compare_values(int a, int b);
long compare_values(long a, long b);
void main(void)
{
float a = 1.2345, b = 2.34567;
cout << "Comparing " << a << ' ' << b << ' ' <<
compare_values(a, b) << endl;
int c = 1, d = 1001;
cout << "Comparing " << c << ' ' << d << ' ' <<
compare_values(c, d) << endl;
long e = 1010101L, f = 2020202L;
cout << "Comparing " << e << ' ' << f << ' ' <<
compare_values(e, f) << endl;
}
很显然,函数同名,但是参数不同----〉编译器可以区分他们?
但是大家看看下面的类呢?编译器如何区分他们;因为从source code上看,
两个class是重名的?---那么这在通常的情况是语法错误。那么编译器坐了什么手脚?
2 对于类模板
#include <iostream.h>
template<class T> class Distance {
public:
Distance(T distance);
void show_distance(void) {
cout << "The distance is " << distance << " miles\n"; };
private:
T distance;
};
template<class T>
Distance<T>::Distance(T distance) { Distance::distance = distance; };
void main(void)
{
Distance<int> short_distance(100);
Distance<long> long_distance(2000000L);
short_distance.show_distance();
long_distance.show_distance();
}