使用构造函数实现特殊数组



使用构造函数实现一个特殊的数组。

#include<iostream>
using namespace std;
int length(const int *s){
int L;
for(L=0; s[L] != ''; L++){};
return L;
}
void scopy(int destination[], const int source[], int dstart=0)
{
int i;
for(i=0; source[i] != ''; i++)
destination[dstart+i]=source[i];
destination[dstart+i]=source[i];    // copy the '' itself
}
class eArray
{
int *ptr;
void * operator new(unsigned int sz);
public:
eArray()
{
ptr=NULL;
}
int size()const {cout<<"Hi";return length(ptr);}
int& operator[](int i) const {return ptr[i];}
eArray(const eArray &rhs)
{
ptr = new int[length(rhs.ptr)+1];
scopy(ptr,rhs.ptr);
}
eArray& operator=(const int* rhs)
{
delete [] ptr;
ptr = new int[length(rhs)+1];
scopy(ptr,rhs);
return *this;
}
eArray& operator=(const eArray &rhs)
{
delete [] ptr;
ptr = new int[length(rhs.ptr)+1];
scopy(ptr,rhs.ptr);
return *this;
}
void push_back(int v)
{
cout<<"Hi2";
int *a=new int[length(ptr)+2];
scopy(a,ptr);
a[length(ptr)]=v;
a[length(ptr)+1]='';
delete[] ptr;
ptr=new int[length(a)+1];
scopy(ptr,a);
}
};

提供输入时发生运行时错误。我认为它在 length(( 函数中是错误的。请帮忙。当我给出一个数字作为输入(比如 2(时,它会push_back函数中打印 Hi2 并终止。

eArray()默认构造函数将ptr初始化为NULL。但是几乎每个操作都假设一个非空ptr; 其中push_back。它们都调用length(ptr),并且length总是取消引用指针,从不检查它是否为 null。

如前所述,生成e.ptr != NULLeArray e实例的唯一方法是通过operator=(const int*),通过为其分配原始int*指针。

最新更新