#pragma once
#include<iostream>
using namespace std;
class QSeqList
{
private:
int *Data;
int Size;
int Len;
public:
QSeqList(int Count);
QSeqList(QSeqList &a);
QSeqList(QSeqList &&a);
QSeqList();
~QSeqList(void);
void Create(int Count);
void Destroy(void);
void Insert(int Pos, int data);
void Cout(void);
QSeqList operator+(QSeqList q);
QSeqList &operator=(QSeqList q);
QSeqList &operator=(QSeqList &&q);
};
#include "stdafx.h"
#include "QSeqList.h"
QSeqList::QSeqList()//默认构造函数
{
}
QSeqList::QSeqList(int Count)//带参构造函数
{
Size=Count;
Data=new int[Size];
Len=0;
}
QSeqList::QSeqList(QSeqList &q)//拷贝构造函数
{
Size=q.Size;
Len=q.Len;
Data=new int[Size];
for(int i=0;i<Len;i++)
Data[i]=q.Data[i];
cout<<"copy"<<endl;
}
QSeqList::QSeqList(QSeqList &&q)//转发构造函数
{
Size=q.Size;
Len=q.Len;
Data=q.Data;
q.Data=nullptr;
}
QSeqList::~QSeqList(void)
{
if(Data!=nullptr)
{
delete Data;
Data=nullptr;
}
Size=0;
Len=0;
}
void QSeqList::Create(int Count)
{
Size=Count;
Data=new int[Size];
Len=0;
}
void QSeqList::Destroy(void)
{
delete Data;
Data=nullptr;
Size=0;
Len=0;
}
void QSeqList::Insert(int Pos, int data)
{
if(Size==Len)
{
Data=(int *)realloc(Data,(Size+10)*sizeof(int));
Size+=10;
}
for(int i=Len-1;i>=Pos;i--)
Data[i+1]=Data[i];
Data[Pos]=data;
Len++;
}
void QSeqList::Cout(void)
{
for(int i=0;i<Len;i++)
cout<<Data[i]<<endl;
}
//将加号重载为两个顺序表相连
QSeqList QSeqList::operator+(QSeqList q)
{
QSeqList r(q.Size+Size);
for(int i=0;i<Len;i++)
r.Insert(i,Data[i]);
for(int i=0;i<q.Len;i++)
r.Insert(r.Len,q.Data[i]);
return r;
}
//将等号重载为拷贝构造函数,&是将函数返回类型转换为引用类型
QSeqList & QSeqList::operator=(QSeqList q)
{
Size=q.Size;
Len=q.Len;
Data=new int[Size];
for(int i=0;i<q.Len;i++)
Data[i]=q.Data[i];
cout<<"运算符重载,拷贝"<<endl;
return *this;
}
//将等号(再次)(第二次重载)重载为转发构造函数
QSeqList & QSeqList::operator=(QSeqList &&q)
{
Size=q.Size;
Len=q.Len;
Data=q.Data;
q.Data=nullptr;
return *this;
}
// Ex2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include"QSeqList.h"
int _tmain(int argc, _TCHAR* argv[])
{
QSeqList a(100);
for(int i=0;i<10;i++)
a.Insert(i,i*i);
a.Cout();
QSeqList b;
b=a;//先自动调用拷贝构造函数,然后再调用运算符重载函数
b.Cout();
b.Insert(3,1000);
b.Cout();
system("PAUSE");
return 0;
}