注册 登录
编程论坛 C++教室

一个关于类模板中成员函数重定义的问题。

silverriver 发布于 2009-10-07 09:10, 1247 次点击
下面这个类模板的声明合法吗?
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)。。但是个人认为最后两个成员函数是冲突的。。
等待答案。
1 回复
#2
silverriver2009-10-07 14:24
没人回答一下吗??等待中
1