第十六課、順序存儲結構的抽象實現----------狄泰軟件學院

1、課程目標

一、完成順序存儲結構的抽象實現,既然是抽象實現,天然就是抽象類,不能生成對象數組

(1)、抽象類模板,存儲空間的位置和大小由子類完成 ide

(2)、這裏只實現順序存儲結構的關鍵操做(增、刪、查等)函數

(3)、提供數組操做符,方便快速獲取元素(要提供const版本的,方便const對象調用)this

2、具體實現

這裏需注意幾點spa

(1)、這裏將capacity()函數設置爲純虛函數,說明在這裏還不須要實現它,將其留到子類中在實現。code

(2)、數組操做符的返回值一個是引用一個是值,是由於const對象不能修改線性表的內容,返回值不能做爲左值,而非const對象能夠對象

3、完整代碼

#ifndef SEQLIST_H #define SEQLIST_H #include "List.h" #include "Exception.h"

using namespace DTLib; namespace DTLib { template <typename T>
class SeqList : public List<T> { private: T* m_array; int m_length; public: bool insert(int i, const T& e) { bool ret = ((0 <= i) && (i <m_length)); ret = ret && ((m_length + 1) <= capacity()); if( ret ) { for(int p=m_length-1; p>=i; p--) { m_array[p+1] = m_array[p]; } m_array[i] = e; m_length++; } return ret; } bool remove(int i) { bool ret = ((0 <= i) && (i < m_length)); if( ret ) { for(int p=i; p<m_length-1; p++) { m_array[p] = m_array[p+1]; } m_length--; } return ret; } bool set(int i, const T& e) { bool ret = ((0 <= i) && (i < m_length)); if( ret ) { m_array[i] = e; } return ret; } bool get(int i, T& e) const { bool ret = ((0 <= i) && (i < m_length)); if( ret ) { e = m_array[i]; } return ret; } int length() const { return m_length; } void clear() { m_length = 0; } T& operator [] (int i) { if((0 <= i) && (i < m_length)) { return m_array[i]; } else { THROW_EXCEPTION(IndexOutOfBoundsException, "parameter i is invalid..."); } } T operator [] (int i) const { return const_cast<SeqList<T>&>(*this)[i];//代碼複用
 } virtual int capacity() const = 0; }; } #endif // SEQLIST_H
SeqList.h
相關文章
相關標籤/搜索