运算符重载实例:可变长整型数组

// Carry.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
using namespace std;

class Array
{
private:
	int size;//数组元素的个数.
	int *ptr;//指向动态分配内存的数组.
public:
	Array(int s=0);//构造函数
	~Array();//析构函数
	Array(Array& a);//复制构造函数.
	Array& operator=(Array& a);//重载等号
	int& operator[](int i);//重载[]符号
	void push_pack(int e);//函数push_back,在末尾加入数据
	int length();//函数length返回数组的长度
};

//构造函数.
Array::Array(int s):size(s)
{
	if(s==0)
		ptr=NULL;
	else
		ptr=new int[s];//开辟动态内存.
}

//析构函数
Array::~Array()
{
	if(ptr!=NULL)
		delete []ptr;//动态内存的释放.
}

//复制构造函数
Array::Array(Array& a)//复制拷贝构造函数,可以直接a(b);将b的内容拷贝给a
{
	if(!a.ptr)
	{
		size=0;
		ptr=NULL;
		return;
	}
	ptr=new int[a.size];
	memcpy(ptr,a.ptr,sizeof(int)*a.size);
	size=a.size;
}

//重载等号
Array& Array::operator=(Array& a)
{
	if(ptr==a.ptr)//避免发生a=a赋值的情况
		return *this;
	if(a.ptr==NULL)//若a数组是空的
	{
		if(ptr)
			delete []ptr;
	    ptr=NULL;
		size=0;
		return *this;
	}
	if(size<a.size)//若是原有的空间小了,则重新开辟内存空间
	{
		if(ptr)
			delete []ptr;
		new int[a.size];
	}
	size=a.size;
	memcpy(ptr,a.ptr,sizeof(int)*a.size);
	return *this;
}

//重载[]符号
int& Array::operator[](int i)//可以直接输出数组的单个数据
{
	//return *(ptr+i);
	return ptr[i];
}
//push_back函数
void Array::push_pack(int e)//从数组的末尾添加元素
{
	if(ptr)
	{
		int *ptr_temp=new int[size+1];
		memcpy(ptr_temp,ptr,sizeof(int)*size);
		delete []ptr;
		ptr=ptr_temp;
		ptr[size]=e;
		size=size+1;
	}
	else
	{
		ptr=new int[1];
		ptr[0]=e;
		size=1;
	}
}

int Array::length()
{
	return size;
}

int _tmain(int argc, _TCHAR* argv[])
{
	Array a;
	for(int i=0;i<10;i++)
		a.push_pack(i);
	for(int i=0;i<10;i++)
		cout<<a[i]<<' ';
	cout<<endl;
	Array b(a);
	for(int i=0;i<10;i++)
		cout<<b[i]<<' ';
	cout<<endl;
	cout<<"a的长度:"<<a.length()<<endl;
	cout<<"b的长度:"<<b.length()<<endl;

	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值