关键词:Array.h的实现、StaticArray.h的实现
1. 课程目标
- 完成
Array
类的具体实现 - 完成
StaticArray
类的具体实现
2. 需求分析
创建数组类代替元素数组的使用
1)数组类包含长度信息
2)数组类能够主动发现越界访问
3. Array设计要点
- 抽象类模板,存储空间的位置和大小由子类完成
- 重载数组操作符,判断访问下标是否合法
- 提供数组长度的抽象访问函数
- 提供数组对象间的赋值操作
4. Array类的声明和实现
Array类的声明#ifndef ARRAY_H
#define ARRAY_H
#include "Object.h"
#include "Exception.h"
namespace DTLib
{
template <typename T>
class Array : public Object
{
protected:
T* m_array;
public:
virtual bool set(int i, const T& e)
{
bool ret = ((0 <= i) && (i < length()));
if( ret )
{
m_array[i] = e;
}
return ret;
}
virtual bool get(int i, T& e) const
{
bool ret = ((0 <= i) && (i < length()));
if( ret )
{
e = m_array[i];
}
return ret;
}
T& operator [](int i)
{
if((0 <= i) && (i < length()))
{
return m_array[i];
}
else
{
THROW_EXCEPTION(IndexOutOfBoundsException, "Parameter i is invaild...");
}
}
T operator [](int i) const
{
return (const_cast<Array<T>&>(*this))[i];
}
virtual int length() const = 0;
};
}
#endif // ARRAY_H
5. StaticArray设计要点
类模板
- 封装原生数组
- 使用模板参数决定数组大小
- 实现函数返回数组长度
- 拷贝构造和赋值操作
6. StaticArray的声明和实现
StaticArray声明StaticArray.h
#ifndef STATICARRAY_H
#define STATICARRAY_H
#include "Array.h"
namespace DTLib
{
template <typename T, int N>
class StaticArray : public Array<T>
{
protected:
T m_space[N];
public:
StaticArray()
{
this->m_array = m_space;
}
StaticArray(const StaticArray<T, N>& obj)
{
this->m_array = m_space;
for(int i=0; i<N; i++)
{
m_space[i] = obj.m_space[i];
}
}
StaticArray<T, N>& operator= (const StaticArray<T, N>& obj)
{
if( this != &obj)
{
for(int i=0; i<N; i++)
{
m_space[i] = obj.m_space[i];
}
}
return *this;
}
int length() const
{
return N;
}
};
}
#endif // STATICARRAY_H
声明:此文章仅是本人在学习狄泰学院《数据结构实战开发教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4
网友评论