我是模板的新手,我对这段代码有一些了解
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>
语句中的return
和operator + (int s)
答案 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)的值数据;