可变长数组的 OO 实现
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
class CArray {
private:
int size;
int *ptr;
public:
CArray (int s = 0);
CArray (CArray & a);
~CArray ();
// 必须有的函数 否则就会有莫名的错误。
void push_back (int v);
CArray & operator = (const CArray & a);
int length () {return size;}
int & operator [] (int i) {return ptr[i];}
void print ();
};
CArray :: CArray(int s): size(s){
if (s == 0) {
ptr = NULL;
}
else {
ptr = new int [s];
}
}
CArray :: CArray (CArray & a) {
if (!a.ptr) {
ptr = NULL;
size = 0;
return ;
}
size = a.length();
ptr = new int[size];
for (int i = 0;i < size; ++ i) {
ptr[i] = a[i];
}
}
CArray :: ~CArray () {
if (size) {
delete []ptr;
}
}
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;
}
}
size = a.size;
delete []ptr;
ptr = new int[size];
for (int i = 0;i < size; ++ i) ptr[i] = a.ptr[i];
return *this;
}
void CArray:: push_back(int v) {
if (ptr) {
int * temp = new int[size + 1];
memcpy (temp,ptr,size * (sizeof (int)));
delete [] ptr;
ptr = temp;
}
else {
ptr = new int[1];
}
ptr[size ++] = v;
}
void CArray:: print () {
for (int i = 0;i < size; ++ i) {
cout << ptr[i] << " ";
}
cout << endl;
}
int main () {
ios_base :: sync_with_stdio(false);
CArray a(0);
for (int i = 0;i < 5; ++ i) {
a.push_back (i);
}
CArray a2(0),a3(0);
a2 = a;
a2.print();
a2 = a3;
a2.print();
a[3] = 100;
CArray a4(a);
a4.print ();
return 0;
}
阅读更多
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了