模板类的成员函数

时间:2013-11-29 05:32:24

标签: c++ templates

我是模板的新手,我对这段代码有一些了解

template <typename T>
class Item
{
  T data;
  public:
   Item <T> ():data(T())
   { 
     cout<<"inside constructor for Item class"<<endl;}
     void setdata(T nvalue){
     data=nvalue;
   }
      Item <T> operator +(int s){
      return Item <T> (data + s);
   }
      T getdata() const
      {
        //T temp =data[0];
         return data;
         }
     void printdata()
      {
       cout<<data<<endl;
      }
};

我不理解的部分是功能

Item <T> operator +(int s){
  return Item <T> (data + s);
} 

我理解运算符'+'在这里被重载但我不明白Item <T>语句中的returnoperator + (int s)

之前的功能是什么

1 个答案:

答案 0 :(得分:1)

假设你有这段代码:

Item<int> myItem;

Item<int> myItem2 = myItem + 3;

这将创建模板的实例和实例(这与类的实例不同)

注意:原始代码中存在错误,您缺少使用者的声明:

Item <T> (T num):data(num)
{ 
  cout<<"inside constructor for Item class"<<endl;
}

这将是这样的:

class Item
{
    int data;
    public:
        Item <int> (int num):data(num)
        { 
            cout<<"inside constructor for Item class"<<endl;
        }

        Item <int> ():data(int())
        { 
            cout<<"inside constructor for Item class"<<endl;
        }

        void setdata(int nvalue)
        {
            data=nvalue;
        }

        Item<int> operator +(int s)
        {
            return Item <int> (data + s);
        }

        int getdata() const
        {
           return data;
        }

        void printdata()
        {
           cout<<data<<endl;
        }
};

顺便说一下,如果T可以添加一个int,那么这个类只会起作用。

Item<int> myItem2 = myItem + 3;

的结果
  

myItem + 3

将是一个新项目,可能现在包含来自myItem plus 3(myItem2)的值数据;