重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C++中支持原生数组,但由于原生数组的天然缺陷(不能获取长度信息、越界访问不会报错...),我们有必要来开发自己的数组类,从而解决这些问题。
数组类的继承关系如图:
需求分析:
1、由于线性表,不能作为数组直接使用,我们需要自己实现一个数组类来代替原生数组。
2、解决原生数组越界访问不会报错的问题
3、提供数组的长度信息
template < typename T >
class Array : public Object
{
protected:
T *m_array;
public:
T& operator [] (int index)
T operator [] (int index) const
bool get(int index, const T& e)
bool set(int index, const T& e)
virtual int length(void) = 0;
};
template < typename T >
class Array : public Object
{
protected:
T *m_array;
public:
T& operator [] (int index)
{
if( (index>=0) && (index&>(*this)[index];
}
bool get(int index, const T& e)
{
bool ret = (index>=0) && (index=0) && (index
设计要点:
template < typename T, int N >
class StaticArray : public Array
protected:
T m_space[N];
public:
StaticArray()
// 提供拷贝构造喊赋值重载函数,实现数组的拷贝
StaticArray(const StaticArray& obj)
T& operator = (const StaticArray& obj)
int length(void)
};
template
class StaticArray : public Array
{
protected:
T m_space[N];
public:
StaticArray()
{
this->m_array = m_space;
}
StaticArray(const StaticArray& obj)
{
this->m_array = m_space;
for(int i=0; i& obj)
{
if(this != &obj)
{
this->m_array = m_space;
for(int i=0; i
设计要点:类模板
template < typename T >
class DynamicArray : public Array
{
protected:
int m_length;
public:
DynamicArray(int length)
DynamicArray(const DynamicArray& obj)
DynamicArray& operator = (const DynamicArray& obj)
void resize(int length)
~DynamicArray()
};
DynamicArray类中的函数实现存在重复的逻辑,可以进行代码优化。
重复代码逻辑的抽象:
— init 函数中实现对象构造时的初始化操作
— copy 函数负责从堆空间中申请内存,并执行拷贝构造操作
— updata 将指定的堆空间作为内部存储数组使用
template
class DynamicList : public SeqList
{
protected:
int m_capacity;
public:
DynamicList(int capacity)
{
this->m_array = new T[capacity];
if(this->m_array != NULL)
{
this->m_length = 0;
this->m_capacity = capacity;
}
else
{
THROW_EXCEPTION(NoEnoughMemoryException,"No memory to create DynamicList object ...");
}
}
int capacity()const
{
return m_capacity;
}
void resize(int capacity)
{
if(capacity != m_capacity)
{
T* array = new T[capacity];
if(array != NULL)
{
int length = (this->m_length < capacity ? this->m_length : capacity);
for(int i=0;im_array[i];
}
T* temp = this->m_array;
this->m_array = array;
this->m_length = length;
this->m_capacity = capacity;
delete[] temp;
}
else
{
THROW_EXCEPTION(NoEnoughMemoryException,"No memory to create DynamicList object ...");
}
}
}
~DynamicList()
{
delete[] this->m_array;
}
};
总结:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。