#include <iostream>
#include <cstring>
using namespace std;
//字符串赋值
char * mcopy(char *desc, const char *source)
{
if (desc != NULL)
{
while (*source)
{
*desc++ = *source++;
}
*desc = '\0';
return desc;
}
return NULL;
}
template<class T>
class A
{
private:
T pt;
public:
A(T t) :pt(t){}
virtual ~A(){ }
T getData() const{ return pt; }
A& operator =(const A &ra);
};
//模板特化
template<>
class A<char *>
{
private:
char* pt;
public:
A(char* t) :pt(t){}
virtual ~A(){ if (pt) delete []pt; }
char* getData() const{ return pt; }
A& operator =(const A &ra);
};
template<class T>
A<T>& A<T>::operator = (const A<T> &ra)
{
T *npt = new T(ra.pt);
pt = *npt;
delete npt;
return *this;
}
//特化 方法2实现
A<char *>& A<char *>::operator = (const A<char *> &ra)
{
pt = new char[strlen(ra.pt) + 1];
mcopy(pt, ra.pt);
return *this;
}
int main()
{
A<int> ia(10);
A<int> ib(12);
ib = ia;
cout << ib.getData() << endl;
/*char a[] = "abc";
char b[] = "de";*/
char *a = "acb";
char * b = "ddcd";
A<char *> pA(a);
A<char *> pB(b);
pB = pA;
cout << pB.getData() << endl;
return 0;
}
拷贝赋值实现
最新推荐文章于 2024-12-03 14:47:51 发布
852

被折叠的 条评论
为什么被折叠?



