一维数组是应用极为广泛的数据结构,但是C++语言的数组没有下标越界检查,因而极易出错。请定义一个安全的

在线等哈!!!!
一维数组是应用极为广泛的数据结构,但是C++语言的数组没有下标越界检查,因而极易出错。请定义一个安全的一维整型数组类intArray,要求:
基本信息:存储数据的基址指针,数组的大小,均定义为private属性。
定义构造函数、析构函数、拷贝构造函数。
定义以下成员函数:
int GetSize();返回数组的大小,即数组的元素个数。
int GetAt(int nIndex) ;获得nIndex索引位置上的数组元素值。
void SetAt(int nIndex , int newElement);向nIndex位置设定新的newElement值。
使用intArray类实现一个冒泡排序程序。
实现的intArray类定义下标运算符“[]”重载函数,并用下标运算符的方法实现冒泡排序。

#include<iostream>
#include<cstdlib>
using namespace std;

class intArray{
int *pa;
unsigned int size;
public:
intArray(unsigned int n=10);
~intArray(){ delete[] pa; }
intArray(intArray &a);
int GetSize(); //返回数组的大小,即数组的元素个数。
int GetAt(int nIndex); //获得nIndex索引位置上的数组元素值。
void SetAt(int nIndex, int newElement); //向nIndex位置设定新的newElement值。
int& operator[](int nIndex);
};
intArray::intArray(unsigned int n)
{
size=n;
pa=new int[n];
for(int i=0; i<n; i++)
*(pa+i)=0;
}
intArray::intArray(intArray &a)
{
size=a.size;
delete[] pa;
pa=new int[size];
for(int i=0; i<size; i++)
*(pa+i)=*(a.pa+i);
}
int intArray::GetSize() //返回数组的大小,即数组的元素个数。
{
return size;
}

int intArray::GetAt(int nIndex) //获得nIndex索引位置上的数组元素值。
{
if(nIndex>=0 && nIndex<size)
return *(pa+nIndex);
else
throw "下标越界";
}
void intArray::SetAt(int nIndex , int newElement) //向nIndex位置设定新的newElement值。
{
if(nIndex>=0 && nIndex<size)
*(pa+nIndex)=newElement;
else
throw "下标越界";
}
int& intArray::operator[](int nIndex)
{
if(nIndex>=0 && nIndex<size)
return *(pa+nIndex);
else
throw "下标越界";
}

int main(){
int n;
cout <<"n=";
cin >>n;
intArray a(n);
try
{
for(int i=0; i<n; i++)
{
a[i]=rand()%100;
cout <<a[i] <<" ";
}
cout <<endl;
//排序
int t;
for(i=0; i<n-1; i++)
for(int j=0; j<n-i-1; j++)
{
if(a[j]>a[j+1])
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
}
for(i=0; i<n; i++)
{
cout <<a[i] <<" ";
}
cout <<endl;
}
catch(char *e){
cout <<"Error: " <<e <<endl;
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答