老话题,拷贝构造函数!!!!
我的代码如下:
#include <iostream.h>
template <class TM>
class _Set {
TM *p;
int size;
int have;
public:
_Set(int init);
_Set(const _Set & set);
void expend(int e);
void add(TM elm);
bool In(TM elm);
bool del(TM elm);
_Set operator * (_Set obj);
_Set operator + (_Set obj);
friend ostream &operator << (ostream &s,_Set set);
};
template <class TM>
_Set<TM>::_Set(int init){
size = (init > 10) ? init:10;
p = new TM[size];
have=0;
}
/////
////
template <class TM>
_Set<TM>::_Set(const _Set & obj)
{
if(this==&obj) return;
delete[] p;
size = obj.size;
have = obj.have;
p = new TM[obj.size];
for(int i =0;i<obj.have;i++ )
p[i]=obj.p[i];
}
template <class TM>
void _Set<TM>::expend(int e){
TM * tmp = new TM[size+e];
for(int i=0;i<size;i++)
tmp[i]= p[i];
delete p;
p=tmp;
size = size + e;
}
template <class TM>
void _Set<TM>::add(TM elem)
{
if(In(elem))
return;
if(size = have)
expend(1);
p[have++] = elem;
}
template <class TM>
bool _Set<TM>::In(TM elem)
{
for(int i=0;i<have;i++)
if(p[i]==have)
return true;
return false;
}
template <class TM>
bool _Set<TM>::del(TM elem)
{
for(i=0;i++;i<have)
if(p[i]==elem)
{
p[i] = p[--have];
return true;
}
return false;
}
template <class TM>
_Set<TM> _Set<TM>::operator * (_Set obj)
{
_Set<TM> tmp(size);
for(int i=0;i<size;i++)
if(obj.In(p[i]))
add(p[i]);
return tmp;
}
template <class TM>
_Set<TM> _Set<TM>::operator +(_Set obj)
{
_Set<TM> tmp(size+obj.size);
for(int i=0; i<have;i++)
tmp.add(p[i]);
for(int k=0;k<obj.have;k++)
if(!tmp.In(obj.p[k]))
tmp.add(obj.p[k]);
return tmp;
}
void main()
{
_Set<int> x(5);
_Set<int> y(7);
x.add(3);
x.add(8);
x.add(6);
x.add(4);
x.expend(5);
x.add(9);
y.add(6);
y.add(7);
y.add(8);
y.add(9);
y.add(7);
_Set<int> z(2);
x=y;
z = (x+y);
_Set<int> a(1);
}