C++ 可变长数组类的实现

来源:互联网 发布:南京软件科技大学2016 编辑:程序博客网 时间:2024/05/16 11:47

涉及到构造函数,析构函数,复制构造函数,运算符=, [ ] 的重载等。

#include <iostream>using namespace std;class CArray{public:    CArray( int s = 0 );CArray( CArray &a);~CArray();void push_back(int i);CArray& operator= (const CArray &a);int& operator[](int i);int length();private:int *ptr;int size;};CArray::CArray( int s ): size(s){if( s==0 )ptr = NULL;elseptr = new int[s];}CArray::~CArray(){if(ptr)delete[] ptr;}CArray::CArray( CArray &a ){if( !a.ptr){ptr = NULL;size = 0;return;}ptr = new int[a.size];size = a.size;    memcpy(ptr, a.ptr, sizeof(int) * size);}void CArray::push_back( int i ){if(ptr){int *tmpPtr = new int[size+1];memcpy(tmpPtr,ptr,sizeof(int)*size);delete[] ptr;ptr = tmpPtr;}else{ptr = new int[1];}ptr[size++] = i;}CArray& CArray::operator= (const CArray &a){if(ptr == a.ptr)return *this;if(a.ptr == NULL){if(ptr)delete[] ptr;ptr = NULL;size = 0;return *this;}if(size < a.size){if(ptr)delete[] ptr;ptr = new int[a.size];}memcpy(ptr, a.ptr, sizeof(int) * a.size);size = a.size;return *this;}int& CArray::operator[](int i){return ptr[i];}int CArray::length(){return size;}int main(){CArray a;for(int i=0; i<5; ++i)a.push_back(i);CArray a2, a3;a2=a;for(int i=0; i<a.length(); ++i)cout << a2[i] << " ";a2 = a3;for(int i=0; i<a2.length(); ++i){cout << a2[i] << " ";}cout << endl;a[3] =100;CArray a4(a);for(int i=0; i<a4.length(); ++i)cout << a4[i] << " ";return 0;}


0 0