19-20 - 数组类的创建

devtools/2024/11/9 15:23:30/

---- 整理自狄泰软件唐佐林老师课程

1. 问题

基于顺序存储结构的线性表可能被当成数组误用,这一节设计数组类来替代原生数组。

2. 课程目标

  1. 完成 Array 类的具体实现
  2. 完成 Array>StaticArray 类的具体实现
  3. 完成 DynamicArray 类的具体实现

在这里插入图片描述

3. 设计要点

  • Array 是一个抽象类,这个类存在的意义就是用来被继承。
  • 需求分析:
  • 设计要点
      1. 抽象类模板,存储空间的位置和大小由子类完成
      1. 重载数组操作符,判断访问下标是否合法
      1. 提供数组长度的抽象访问函数
      1. 提供数组对象间的复制操作(原生数组不提供复制操作,我们数组要提供复制操作)

Array__21">4. 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;
};

【19 数组类的创建 Array

Array>StaticArray_41">5. Array>StaticArray

5.1 设计要点

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

Array>StaticArray__49">5.2 Array>StaticArray 类的声明

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

5.3 实现

【19 数组类的创建 Array>StaticArray

Array_67">6. DynamicArray

6.1 设计要点

  • 类模板
    • 动态确定内部数组空间的大小
    • 实现函数返回数组长度
    • 拷贝构造和赋值操作

Array__74">6.2 DynamicArray 类的声明

template <typename T, int N>
class DynamicArray : public Array<T>
{
protected:int length;
public:DynamicArray(int length);DynamicArray(const DynamicArray<T>& obj);DynamicArray<T>& operator= (const DynamicArray<T>& obj);int length() const;void resize(int length);~DynamicArray();
};

6.3 实现

【20 数组类的创建 DynamicArray

6.4 重构

  • DynamicArray 类中的函数实现存在重复的逻辑,如何进行代码优化?
  • 重复代码逻辑的抽象
  • init - 对象初始化时的初始化操作
  • copy - 在堆空间中申请新的内存,并执行拷贝操作
  • update - 将指定的堆空间作为内部存储数组使用

【20 数组类的创建DynamicArray_重构】


http://www.ppmy.cn/devtools/3776.html

相关文章

Spire.PDF for .NET【文档操作】演示:动态创建 PDF 并将其发送到客户端浏览器

可移植文档格式 (PDF) 是 Adobe 制定的独立规范的固定版式文档。它封装了完整的描述&#xff0c;包括文本字体、图形和显示它所需的其他信息。 Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库&#xff0…

stm32实现hid鼠标

启动CubelMX 选择芯片&#xff08;直接输入stm32f103zet6) 设置时钟 如下图 usb设置 配置usb设备 调试端口设置 配置时钟 项目输出设置 打开工程&#xff08;后记&#xff1a;此工程含有中文不能编译通过) 配置项目 配置调试器 编译无法通过 删除路径中的中文&#xff0c;以及…

数据结构:哈密顿回路基础

什么是哈密顿回路&#xff1f; 哈密顿回路&#xff08;Hamiltonian Cycle&#xff09;是图论中的一个概念&#xff0c;指的是在一个图中通过图的每个顶点恰好一次且仅一次&#xff0c;并最终回到起始顶点的闭合回路。在一个哈密顿回路中&#xff0c;除了起始和结束的顶点必须是…

VUE项目使用.env配置多种环境以及如何加载环境

第一步&#xff0c;创建多个环境配置文件 Vue CLI 项目默认使用 .env 文件来定义环境变量。你可以通过创建不同的 .env 文件来为不同环境设置不同的环境变量&#xff0c;例如&#xff1a; .env —— 所有模式共用.env.local —— 所有模式共用&#xff0c;但不会被 git 提交&…

用Python在PDF文档中插入单图像水印和平铺图像水印

PDF文档因其跨平台兼容性和内容保真度成为信息交换的标准载体&#xff0c;为应对版权侵犯、内容篡改以及未经授权的传播等风险&#xff0c;向PDF中插入图片水印成为一种强化文档安全性、彰显所有权及实施访问控制的有效手段。图片水印不仅能以直观的方式标示文档来源、强化版权…

OpenHarmony开发案例:【分布式遥控器】

1.概述 目前家庭电视机主要通过其自带的遥控器进行操控&#xff0c;实现的功能较为单一。例如&#xff0c;当我们要在TV端搜索节目时&#xff0c;电视机在遥控器的操控下往往只能完成一些字母或数字的输入&#xff0c;而无法输入其他复杂的内容。分布式遥控器将手机的输入能力…

2024五一杯数学建模A题B题C题思路汇总分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

npm install CERT_HAS_EXPIRED解决方法

目录 一、问题描述二、问题原因三、解决方法 一、问题描述 执行命令 npm install 报错&#xff1a; npm WARN registry Unexpected warning for https://registry.npm.taobao.org/: Miscellaneous Warning CERT_HAS_EXPIRED: request to https://registry.npm.taobao.org/js-…