C++数据结构第19课、数组类的创建(上)

  • 课程目标
    — 完成 Array 类的具体实现
    — 完成 StaticArray 类的具体实现

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

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

  • Array 类的声明
    在这里插入图片描述

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(IndexOutOfBoundsException, "Parameter i is Invalid");
        }
    }

    T operator[](int i)const
    {
        return (const_cast<Array<T>&>(*this)[i]);
    }

    virtual int length()const = 0;
};

}
#endif // ARRAY_H

2、数组类的创建

  • 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

main.cpp

#include <iostream>

#include "StaticArray.h"
using namespace std;
using namespace DTLib;

int main()
{
    StaticArray<int, 5> sa;
    for(int i = 0;i < sa.length(); i++)
    {
        sa[i] = i*i;
    }

    for(int i = 0;i < sa.length(); i++)
    {
        cout << sa[i] << endl;
    }

    StaticArray<int, 5> aa;

    aa = sa;

    for(int i = 0; i < aa.length(); i++)
    {
        cout << aa[i] << endl;
    }

    sa[6] = 5;
    return 0;
}

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值