// 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;
}
运算符重载实例:可变长整型数组
最新推荐文章于 2023-11-22 21:28:21 发布