| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1247 人关注过本帖
标题:一个关于类模板中成员函数重定义的问题。
取消只看楼主 加入收藏
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
快速回复:一个关于类模板中成员函数重定义的问题。
数据加载中...
 
   



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

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