C++ 可变长数组类的实现
涉及到构造函数,析构函数,复制构造函数,运算符=, [ ] 的重载等。
#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; else ptr = 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; }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: linux 查看gcc版本,支持C++11