浅显易懂,没啥好解释的。代码如下:
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <assert.h>
using namespace std;
typedef unsigned int UINT;
template<class T>
class Array{
private:
T* _element;
UINT _size;
public:
Array(UINT size){
this->Array<T>::Array();
this->reSize(size);
}
Array(){
_element = nullptr;
_size = 0;
}
virtual ~Array(){
delete[] _element;
_element = nullptr;
_size = 0;
}
Array(const Array<T>& obj){
//复制构造
this->_size = obj._size;
this->_element = new (std::nothrow) T[obj._size];
if (this->_element == nullptr){
cerr << "赋值构造的时候内存分配出错" << endl;
throw;
exit(1);
}
memcpy(this->_element, obj._element, obj._size* sizeof(T));
}
UINT getLength(){ return _size; }
bool isEmpty(){ return _size == 0 ? true : false; }
Array<T>& operator = (const Array<T>& src){
//赋值符号重载
T* oldMemory = _element;
_element = new (std::nothrow) T[src._size];
if (_element == nullptr){
cerr << "赋值的时候申请内存失败!" << endl;
throw;
return *this;
}
memcpy(_element, src._element, src._size * sizeof(T));
this->_size = src._size;
delete[] oldMemory;
return *this;
}
T& operator [](const UINT& index){
//取值符号重载
if (index >= _size){ cerr << "您对Array的取值访问发生了越界!" << endl; throw; }
return *(_element + index);
}
protected:
bool reSize(UINT size){
T* oldMemory = _element;
if (size > 0){
T* newMemory = new (std::nothrow) T[size];
memset(newMemory, 0, size*sizeof(T));
if (newMemory == nullptr){
return false;
}
memcpy(newMemory, oldMemory, _size*sizeof(T));
_element = newMemory;
}
_size = size;
delete[] oldMemory;
return true;
}
};
int main(){
Array<int> arr(10);
Array<int> arr1(20);
for (UINT i = 0; i < arr.getLength(); i++){
arr[i] = i;
}
for (UINT i = 0; i < arr1.getLength(); i++){
arr1[i] = i;
}
arr = arr1;
for (UINT i = 0; i < arr.getLength(); i++){
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
运行结果: