⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arry.h

📁 一个对数组越界检查的小程序
💻 H
字号:
#include<iostream.h>
#include<stdlib.h>

enum ErrorType{invalidArraySize,memoryAlloctionError,indexOutOfRange};
char *errorMsg[]=
{
	"Invalid array size:","Memory alloction error:","Invalid index:"
};
template <class T>
class Array
{
	private:
		T* alist;
		int size;
		void Error(ErrorType errorCommitted,int badIndex=0)const;
	public:
		Array(int sz=50);
		Array(const Array<T>& X);
		~Array(void);


		Array<T>& operator=(const Array<T>& rhs);
		T& operator[](int i);
		operator T* (void) const;

		int ListSize(void)const;
		void Resize(int sz);
};

template <class T>
void Array<T>::Error(ErrorType errorCommitted,int badIndex)const
{
}

template <class T>
Array<T>::Array(int sz)
{
	//检查数组大小参数是否合法
	if(sz<=0)
		Error(invalidArraySize);
	//给size赋值并动态申请内存
	size=sz;
	alist=new T[size];
	//确保系统分配了所需内存
	if(alist==NULL)
		Error(memoryAlloctionError);

}

template <class T>
Array<T>::Array(const Array<T>& X)
{
	//取得对象X的大小并将其赋值给当前对象
	int n=X.size;
	size=n;
	//为对象申请新内存并进行出错检查
	alist=new T[n];
	if(alist==NULL)
		Error(memoryAlloctionError);
	//从X中拷贝数组元素到当前对象
	T* srcptr=X.alist;//X.alist的首地址
	T* destptr=alist; //alist的首地址
	while(n--)//拷贝表
		*destptr++=*srcptr++;

}

template <class T>
Array<T>::~Array(void)
{
	delete[] alist;
}



template <class T>
Array<T>& Array<T>::operator=(const Array<T>& rhs)
{
	alist=rhs;
	return *this;


}

//重载下标运算符
		template <class T>
T& Array<T>::operator[](int n)
		{
			//数据越界检查
			if(n<0||n>size-1)
				Error(indexOutOfRange,n);
			//从私有数组中返回元素值
			return alist[n];

		}

		//指针转换运算符
		template <class T>
Array<T>::operator T* (void) const
		{
			//返回当前对象中私有数组的首地址
			return alist;
		}

		template <class T>
int Array<T>::ListSize(void)const
		{
			return size;

		}
		//调整数组大小运算符
template <class T>
void Array<T>::Resize(int sz)
{
	//检查新的大小参数;若其小于0,则退出程序
	if(sz<=0)
		Error(invalidArraySize);
	//若大小不变,则简单返回
	if(sz==size)
		return;
	//需申请新的内存,确认系统已经分配所需内存
	T*newlist=new T[sz];
	if(newlist==NULL)
		Error(memoryAlloctionError);
	//n为需拷贝元素的个数
	int n=(sz<=size)?sz:size;
	T*srcptr=alist; //alist的首地址
	T*destptr=newlist;//newalist的首地址
	while(n--)   //拷贝表表元素
		*destptr++=*srcptr++;
	//删除旧表
	delete[] alist;
	//将alist指针指向newlist,并改变size大小值
	alist=newlist;
	size=sz;


	
	
}		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -