一个关于类模板中成员函数重定义的问题。
下面这个类模板的声明合法吗?template <class T, int n>
class ArrayTP
{
private:
T ar[n];
public:
ArrayTP() {};
explicit ArrayTP(const T & v);
virtual T & operator[](int i);
virtual T operator[](int i) const;
};
这是c++ primer plus 上的一个例子,我认为最后的两个成员函数的会冲突,只有返回值不同,而参数完全相同。函数不是只能通过不同的参数列表重载吗?
书上没有给出具体的解释。故在此求解。。。
还是把类定义也粘上来吧 这个类的目的是模拟一个数组。。
template <class T, int n>
ArrayTP<T,n>::ArrayTP(const T & v)
{
for (int i = 0; i < n; i++)
ar[i] = v;
}
template <class T, int n>
T & ArrayTP<T,n>::operator[](int i)
{
if (i < 0 || i >= n)
{
std::cerr << "Error in array limits: " << i
<< " is out of range\n";
std::exit(EXIT_FAILURE);
}
return ar[i];
}
template <class T, int n>
T & ArrayTP<T,n>::operator[](int i)
{
if (i < 0 || i >= n)
{
std::cerr << "Error in array limits: " << i
<< " is out of range\n";
std::exit(EXIT_FAILURE);
}
return ar[i+1];
}
这段程序可以安全的通过编译器的编译。。(我用的是visual stdio 2008)。。但是个人认为最后两个成员函数是冲突的。。
等待答案。