免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1763 | 回复: 1
打印 上一主题 下一主题

默认形式构造函数的实现的问题,求救? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-17 09:11 |只看该作者 |倒序浏览
本帖最后由 qingshanxiaozi 于 2011-03-17 09:13 编辑

template <class T>  
          //类模板:实现对任意类型数据进行存取
class Store
{   private:
        T item;         // 用于存放任意类型的数据
        int haveValue;  // 用于标记item是否已被存入内容
    public:
        Store(void);    // 默认形式(无形参)的构造函数
        T GetElem(void);  //提取数据函数
        void PutElem(T x);  //存入数据函数
};
// 默认形式构造函数的实现
template <class T>                              
Store<T>::Store(void): haveValue(0) {}

问题是这里的“:haveValue(0)”是什么意思?不是说在类的模板外定义类的成员函数的形式是:
类型名 类名<模板参数表>::函数名(参数表)
那么“:haveValue(0)”是什么意思?

template <class T>      // 提取数据函数的实现
T Store<T>::GetElem(void)   
{   // 如果试图提取未初始化的数据,则终止程序
    if (haveValue == 0)
    {  cout << "No item present!" << endl;
        exit(1);
    }
    return item;    // 返回item中存放的数据
}
template <class T>     // 存入数据函数的实现
void Store<T>:utElem(T x)
{   haveValue++;      // 将haveValue 置为 TRUE,表示item中已存入数值
    item = x;         // 将x值存入item
}
void main(void)
{   Student g= {1000, 23};  
        Store<int> S1, S2;
    Store<Student> S3;
    Store<double> D;
       
    S1.PutElem(3);
    S2.PutElem(-7);
    cout << S1.GetElem() << "  " << S2.GetElem() << endl;
               
    S3.PutElem(g);
    cout << "The student id is " << S3.GetElem().id << endl;
       
    cout << "Retrieving object D  " ;
        cout << D.GetElem() << endl;  //输出对象D的数据成员
        // 由于D未经初始化,在执行函数D.GetElement()时出错
}

论坛徽章:
0
2 [报告]
发表于 2011-03-18 17:24 |只看该作者
haveValue(0),就是初始化类成员变量为0。没啥好说的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP