到目前为止,我们还无法创建一个顺序存储结构线性表的对象出来,为什么呢?
顺序存储空间究竟是什么,顺序存储空间的大小是多少?
StaticList设计要点
——类模板
使用原生数组作为顺序存储空间
使用模板参数决定数组大小
template <typename T, int N>
class StaticList: public SeqList<T>
{
protected:
T m_space[N]; //顺序存储空间,N为模板参数
public:
StaticList(); //指定父类成员的具体值
int capacity() const;
};
StaticList.h
#ifndef STATICLIST_H
#define STATICLIST_H
#include "seqlist.h"
namespace DTLib
{
template <typename T, int N>
class StaticList: public SeqList<T>
{
protected:
T m_space[N]; //顺序存储空间,N为模板参数
public:
StaticList() //指定父类成员的具体值
{
this->m_array = m_space; //将父类的m_array这个指针指向子类的m_space这个数组
this->m_length = 0;
}
int capacity() const
{
return N;
}
};
}
#endif // STATICLIST_H
测试main.cpp
#include <iostream>
#include "Staticlist.h"
using namespace std;
using namespace DTLib;
int main()
{
StaticList<int, 5> sl;
for(int i=0; i<sl.capacity(); i++)
{
sl.insert(0,i); //每次都在线性表的头部进行插入
}
for(int i=0; i<sl.length(); i++)
{
cout << sl[i] << endl;
}
return 0;
}
实验二:
#include <iostream>
#include "Staticlist.h"
using namespace std;
using namespace DTLib;
int main()
{
StaticList<int, 5> sl;
for(int i=0; i<sl.capacity(); i++)
{
sl.insert(0,i); //每次都在线性表的头部进行插入
}
for(int i=0; i<sl.length(); i++)
{
cout << sl[i] << endl;
}
sl[5] = 10;
return 0;
}
这个地方抛出了一个异常,因为我们在重载数组操作符时,已经指定了当越界时,就抛出IndexOutOfBoundsException这个类的异常信息。从这个地方,就可以看出抛出异常的好处了,当程序崩溃时,可以让我们快速的定位,如果不在重载数组操作符那个函数中抛出异常,我们将很难定位这种程序崩溃问题。