首页 > 编程语言 > 详细

数组类的创建——上

时间:2019-12-18 00:47:05      阅读:75      评论:0      收藏:0      [点我收藏+]

创建好的基于顺序存储结构的线性表存在两个方面的问题:
1)功能上的问题:数组操作符的重载带来的问题,有可能线性表被无用为数组了,线性表被当做数组来使用了。
2)效率方面的问题

本篇博客就要解决功能上的问题。

数组类的开发
需要在DTLib中提供安全可靠的原生数组的代替品,原生数组C++是直接支持的,但是原生数组有其自己的劣势,不能提供数组的长度信息,并且无法检测当前的操作是否合法。

——完成Array类的具体实现
——完成StaticArray类的具体实现

技术分享图片

需求分析:
——创建数组类代替原生数组的使用
  数组类包含长度信息
  数组类能够主动发现越界访问

Array设计要点
——抽象类模板,存储空间的位置和大小由子类完成
——重载数组操作符,判断访问下标是否合法
——提供数组长度的抽象访问函数
——提供数组对象间的复制操作

Array.h

#ifndef ARRAY_H
#define ARRAY_H

#include "Object.h"
#include "Exception.h"

namespace DTLib
{
template <typname 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 boot 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,"Paramete i is invalid...");
        }
    }
    T operator[] (int i) const
    {
        return (const_cast< Array<T&> >(*this)[i]);
    }
    virtual int length() const = 0;
};

}

#endif // ARRAY

StaticArray设计要点:
——类模板
  封装原生数组
  使用模板参数决定数组大小
  实现函数返回数组长度
  拷贝构造和赋值操作

 

数组类的创建——上

原文:https://www.cnblogs.com/-glb/p/12057430.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!