标题:一个关于类模板中成员函数重定义的问题。
只看楼主
silverriver
Rank: 1
来 自:河北邯郸
等 级:新手上路
帖 子:56
专家分:0
注 册:2009-4-7
结帖率:83.33%
 问题点数:0 回复次数:1 
一个关于类模板中成员函数重定义的问题。
下面这个类模板的声明合法吗?
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)。。但是个人认为最后两个成员函数是冲突的。。
等待答案。
搜索更多相关主题的帖子: 定义 成员 模板 
2009-10-07 09:10
silverriver
Rank: 1
来 自:河北邯郸
等 级:新手上路
帖 子:56
专家分:0
注 册:2009-4-7
得分:0 
没人回答一下吗??等待中

life for myself
2009-10-07 14:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-287744-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.232920 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved