| 发表于:2008-01-14 08:22:53 楼主 |
下面的程序是一个安全数组 问2个问题 当只创建一个对象时 没有任何问题 可是在加一个就会出错 例如将主函数改为 int main() { array a(7); array b(7); cin> > a; cout < <a; cout < <a.getsize(); cin> > b; cout < <b; system("pause"); return 0; } 不知道为什么 请大家帮忙看看 我用的编译器是dev c++ 4.9.9.2 // driver for simple class array1 #include <iostream> #include <iomanip> using std::cout; using std::cin; using std::endl; using std::ostream; using std::istream; using std::setw; //#include "array1.cpp" class array { friend ostream &operator < < (ostream &, const array &); friend istream &operator> > (istream &, array &); public: array(int as=10); array(const array &); ~array(); int getsize()const; const array &operator=(const array &); bool operator==(const array &) const; bool operator!=(const array &right) const { return !(*this==right); } int &operator[](int); const int &operator[](int) const; static int getarraycount(); private: int size; int *ptr; static int arraycount; }; int array::arraycount=0; array::array(int as) { size=(as> 0? as:10); assert(ptr!=0); ++arraycount; for(int i=0;i <size;i++) ptr[i]=0; } array::array(const array &init):size(init.size) { ptr=new int[size]; assert(ptr!=0); ++arraycount; for(int i=0;i <size;i++) ptr[i]=init.ptr[i]; } array::~array() { delete[] ptr; --arraycount; } int array::getsize() const { return size; } const array &array::operator=(const array &right) { if(&right!=this) { if(size!=right.size) { delete[] ptr; size=right.size; ptr=new int[size]; assert(ptr!=0); } for(int i=0;i <size;i++) ptr[i]=right.ptr[i]; } return *this; } bool array::operator==(const array &right) const { if (size!=right.size) return false; for(int i=0;i <size;i++) if(ptr[i]!=right.ptr[i]) return false; return true; } int &array::operator[](int subscript) { assert(0 <=subscript && subscript <size); return ptr[subscript]; } istream &operator > > (istream &input, array &a) { for(int i=0;i <a.size; i++) input> > a.ptr[i]; return input; } ostream &operator < <(ostream &output,const array &a) { int i; for(i=0;i <a.size;i++) { output < <setw(12) < <a.ptr[i]; if((i+1)%4==0) output < <endl; } if(i%4!=0) output < <endl; return output; } int main() { array a(7); cin> > a; cout < <a; cout < <a.getsize(); system("pause"); return 0; } |
|
|
|
|