读书人

泛型编程中怎么实现运算符重载

发布时间: 2012-02-08 19:52:21 作者: rapoo

泛型编程中如何实现运算符重载
以下这段代码中,对 "= "和 "-- "的重载那应怎样写呢?多谢。
template <class _Tid=int>
class stu
{
protected:
_Tid id;
public:
_Tid id_pub;
typedef stu <_Tid> _Myt;
void set_id (_Tid id)
{
this-> id=id;
}
_Tid get_id ()
{
return id;
}
_Myt&operator--()
{
if (_Tid==int)//如何判断_Tid是何种类型
this-> id_pub--;
else
{
int t=atoi (this-> id_pub);
t--;
itoa (t,this-> id_pub,10);
}
return (*this);
}
_Myt&operator=(const _Myt&_X)
{
set_id (_X.id_pub);//这样写就没问题
//set_id (_X.get_id ());此句会出错,说this指针错误,如想使用get_id ()应如何写?
return (*this);
}
};

[解决办法]
用 typeid.name() 获得类型名称
[解决办法]
template <class _Tid=int>
class stu
{
protected:
_Tid id;
public:
_Tid id_pub;
typedef stu <_Tid> _Myt;
void set_id (_Tid id)
{
this-> id=id;
}
_Tid get_id () const
{
return id;
}
_Myt& operator--()
{
int t= atoi(this-> id_pub);
t--;
_itoa (t,this-> id_pub,10);
return (*this);
}
_Myt&operator=(const _Myt& _X)
{
set_id (_X.get_id ());
return (*this);
}
};


template <>
class stu <int>
{
protected:
int id;
public:
int id_pub;
typedef stu <int> _Myt;
void set_id (int id)
{
this-> id=id;
}
int get_id () const
{
return id;
}
_Myt& operator--()
{
this-> id_pub--;
return *this;
}
_Myt&operator=(const _Myt& _X)
{
set_id (_X.get_id ());
return (*this);
}
};

读书人网 >C++

热点推荐