有关“=”重载的问题
请问“=”号的重载有什么问题,请帮指正一下!
template <class T>
class SeqList
{
private:
T *data;
int size;
int MaxSize;
public:
SeqList(int sz = 100);
~SeqList() { delete []data; }
int Length() const { return size; }
bool IsEmpty() const { return size == 0; }
void Insert(const T &x, int k);
void Delete(int k);
T GetData(int k) const;
int Find(const T &x) const;
int countSize(){return size;}
void Output(ostream &out) const;
};
template <class T>
SeqList <T>::SeqList(int sz)
{ MaxSize=sz;
data=new T[MaxSize];
size=0;
}
template <class T>
void SeqList <T>::Insert(const T &x, int k)
{
if( k <1 || k>size+1 )
{ cerr < <"越界出错"; exit(1); }
if(size==MaxSize)
{ cerr < <"顺序表已满"; exit(1); }
for(int i=size-1; i>=k-1; i--) data[i+1]=data[i];
data[k-1]=x;
size++;
}
template <class T>
void SeqList <T>::Delete(int k)
{
if(size==0)
{ cerr < <"顺序表空"; exit(1); }
if( k <1 || k>size )
{ cerr < <"越界出错"; exit(1); }
for(int i=k; i <size; i++) data[i-1]=data[i];
size--;
}
template <class T>
T SeqList <T>::GetData(int k) const
{
if( k <1 || k>size )
{ cerr < <"越界出错"; exit(1); }
return data[k-1];
}
template <class T>
int SeqList <T>::Find(const T &x) const
{
int i=0;
while(i <size && data[i]!=x) i++;
if(i <size) return i+1;
else return 0;
}
/*或
template <class>
int SeqList <T>::Find(const T &x) const
{
for(int i=0; i <size; i++)
if(data[i]==x) return i+1;
return 0;
} //*/
template <class T>
void SeqList <T>::Output(ostream &out) const
{
for(int i=0; i <size-1; i++)
out < < data[i] < < ", ";
cout < < data[size-1];
}
template <class T>
ostream& operator < <(ostream &out, const SeqList <T> &x)
{
x.Output(out);
return out;
}
#include <fstream>#include "SeqList.h"using namespace std;template <typename T>class Set{public: Set( int sz = 100 ); ~Set(){ delete []seqSet; } void IsEmpty(); void addMember(const T x); void delMember(const T x); void display(); void Contains(const T x); void count(); T getElement(int k) const; Set<T>& operator=(const Set<T>& R);private: SeqList<T> *seqSet;};template <typename T>Set<T>::Set(int sz ){ seqSet = new SeqList<T>( sz );}template <typename T>void Set<T>::IsEmpty(){ if(seqSet->IsEmpty()) { cout << "空!" << endl; } else { cout << "不为空!" << endl; }}template <typename T>void Set<T>::addMember(const T x){ seqSet->Insert(x, 1);}template <typename T>void Set<T>::delMember(const T x){ seqSet->Delete(seqSet->Find(x));}template <typename T>void Set<T>::display(){ cout << "{ "; seqSet->Output(cout); cout << " }";}template <typename T>void Set<T>::Contains(const T x){ if(seqSet->Find( x )) { cout << "包含此元素!" << endl; } else { cout << "不包含此元素!" << endl; }}template <typename T>void Set<T>::count(){ cout << seqSet->countSize();}template <typename T>T Set<T>::getElement(int k) const{ return seqSet->GetData(k);}template <typename T>Set<T>& Set<T>::operator =(const Set<T> &R){ delete []seqSet; seqSet = new SeqList<T>(R.seqSet->countSize()); for ( int i = R.seqSet->countSize(); i < 1; i-- ) { seqSet->Insert(R.getElement(i),i); } return this;}
#include <iostream>using namespace std;#include "Set.h"int main(){ Set<int> s, b, c; cout << "测试程序!" << endl; cout << "判断A是否为空!\n结果:"; s.IsEmpty(); s.addMember( 1 ); cout << "向集合A增加元素1之后,\nA = "; s.display(); s.IsEmpty(); s.addMember( 2 ); s.addMember( 8 ); s.addMember( 23 ); s.addMember( 7 ); s.addMember( 11 ); cout << "向集合A增加元素2、8、23、7、11之后,\nA = "; s.display(); cout << "\n再次判断A是否为空!\n结果:"; cout << "\n在A中查找7:" << endl; s.Contains( 7 ); s.delMember( 7 ); cout << "删除A中的7之后,\nA = "; s.display(); cout << "\n在A中再次查找7:" << endl; s.Contains( 7 ); cout << "A中元素个数为:"; s.count(); b.addMember( 3 ); b.addMember( 31 ); b.addMember( 23 ); b.addMember( 17 ); cout << "创建集合B:\nB = "; b.display(); cout << "\n集合A,B如下:" << endl; cout << "A = "; s.display(); cout << "\nB = "; b.display(); //cout << b.getElement(1); c = b; c.display(); return 0;}