洋葱汪的博客

学习笔记记录

第19课 - 数组类的创建(上)

1、数组类的创建

        课程目标 

            -完成Array类的具体实现 

            -完成StaticArray类的具体实现 

   


        需求分析 

            -创建数组类代替原生数组的使用 

                        数组类包含长度信息 

                        数组类能够主动发现越界访问 


        Array设计要点 

                -抽象类模板,存储空间的位置和大小由子类完成 

                -重载数组操作符,判断访问下标是否台法 

                -提供数组长度的抽象访问函数 

                -提供数组对象间的复制操作


         Array类的声明 

template <typename T>  
class Array : public Object  
{  
protected:  
    T* m_array;  
public:  
    virtual bool set(int i,const T& e) ;
    virtual bool get(int i,T& e) const;
    virtual int length() const = 0 ; 
  
    T& operator [] (int i);
    T operator [] (int i) const ;
};


2、编程实验 

数组抽象类实现     Array.h 

#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(IndexOutOfBoundsExpception,"Parameter i is invalid ...");  
        }  
    }  
    T operator [] (int i) const  
    {  
        return (static_cast<Array<T>&>(*this)[i]);  
    }  
  
    virtual int length()const = 0 ;  
  
};  
  
}  
  
  
#endif // ARRAY_H  


        StaticArray设计要点

            -类模板 

                 封装原生数组 

                使用模板参数决定数组大小 

                实现函数返回数组长度 

                拷贝构造赋值操作 


        StaticArray类的声明 

template <typename T,int N>  
class StaticArray : public Array<T>  
{  
protected:  
    T m_space[N];  
public:  
    StaticArray() ;
    
    StaticArray(const StaticArray<T,N>& obj); 
    StaticArray<T,N>& operator= (const StaticArray<T,N>& obj);
    
    int length() const;
};


3、编程实验 

静态数组类的实现     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  

main.cpp

#include<iostream>  
#include"StaticArray.h"  
  
using namespace std;  
using namespace DTLib;  
  
int main()  
{  
    StaticArray<int,5> s1;  
  
    for(int i=0;i<s1.length();i++)  
    {  
        s1[i] = i*i;  
    }  
    for(int i=0;i<s1.length();i++)  
    {  
        cout<<s1[i]<<endl;  
    }  
  
    StaticArray<int ,5> s2;  
  
    s2 = s1;  
  
    for(int i=0;i<s2.length();i++)  
    {  
        cout<<s2[i]<<endl;  
    }  
  
    int s3[2];  
  
    s3[4] = 100;    //难以调试  
  
    s2[6] = 100;      //越界访问
      
  
  
    return 0;  
}  



4、实战预告 

        To be continued ... 

        思考: 

                如何实现DynamicArray

            DynamicArrayStaticArray的差异在哪里? 

                



阅读更多
版权声明:笔记内容整理于狄泰软件,未经博主允许,禁止将笔记转载 https://blog.csdn.net/qq_39654127/article/details/79965750
个人分类: 数据结构实战开发
上一篇第18课 - 顺序存储线性表的分析
下一篇第20课 - 数组类的创建(下)
想对作者说点什么? 我来说一句

opengl 粒子系统

2011年05月15日 31KB 下载

Nehe第19课粒子系统源代码20121007

2012年10月07日 2.51MB 下载

雅悠教程之易语言第19课

2010年11月04日 1019KB 下载

JAVA程序设计面向对象实训报告

2018年01月04日 1.33MB 下载

C++创建动态数组

2014年06月01日 749B 下载

第五章 数组、字符串与类库

2010年04月09日 126KB 下载

没有更多推荐了,返回首页

关闭
关闭