第二课的课后练习

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值