自定义数组类

2023-10-29

在学习c++的过程中,我们经常使用到数组,那怎么去定义一个类去实现数组的功能呢?
我们先列出一些经常对数组进行的一些操作,

1、 创建一个指定容量的数组
2、 用已有的数组初始化另一个数组
3、 用已有的数组给另一个数组赋值
4、 给数组添加元素/给数组元素赋值
5、 获取数组指定元素的值
6、 输入一定数量的值,将值赋给数组
7、 输出数组
……
还有很多,本次只实现以上功能

以下是代码:

1、MyArray.h 文件 :MyArray 类的声明
#pragma once
#include <iostream>
using namespace std;
class MyArray
{
public:
	// 构造函数
	MyArray();
	// 拷贝构造函数
	MyArray(const MyArray&m);
	// 有参构造函数
	MyArray(int len);
	// 析构函数
	~MyArray();
	// 设置值
	void setData(int index, int data);
	// 获取值
	int getData(int index);
	// 获取长度
	int getLen()const;
	// 重载赋值运算符
	MyArray & operator =(const MyArray&);
	// 重载 []
	int & operator [](int i)const;
	// 重载<<
	friend ostream & operator << (ostream & os, const MyArray & ma);
	// 重载>>
	friend istream & operator >> (istream & is, MyArray & ma);
private:
	int len; // 数组长度
	int * space;// 指针 指向堆上的空间
};
2、MyArray.cpp 文件 :MyArray 类的实现
#include "MyArray.h"
// 构造函数
MyArray::MyArray()
{ 
 	this->len = 0; this->space = NULL; 
}
// 拷贝构造函数
MyArray::MyArray(const MyArray&m)
{
	this->len = m.len;
	// 深拷贝
	if (this->space == NULL)
	{
		this->space = new int[this->len];//申请分配新内存
	}
	for (int i = 0; i < this->len; i++)
	{
		this->space[i] = m.space[i];//拷贝值
	}
}
//有参构造函数
MyArray::MyArray(int len)
{
	if (len <= 0) 
	{
	 	this->len = 0; 
	 	return; 
	}
	else
	{
		this->len = len;
		this->space = new int[this->len];
	}
}
// 析构函数
MyArray::~MyArray()
{
	if ((this->space) != NULL)
	{
		delete this->space;
		this->space = NULL;
		len = 0;
	}
}
// 设置值
void MyArray::setData(int index, int data) 
{ 
	if (this->space != NULL) 
	{ 
		this->space[index] = data; 
	}
}
// 获取值
int MyArray::getData(int index) 
{ 
	return this->space[index]; 
};
// 获取长度
int MyArray::getLen()const
{
 	return this->len;
};
// 重载赋值运算符
MyArray&  MyArray::operator =(const MyArray&m)
{
	if (this == &m) 
	{ 
		return *this; 
	}
	
	// 如果数组不为空,清空数组当前内容
	if (this->space != NULL)
	{
		delete[] this->space;
		this->space = NULL;
	}
	// 深拷贝
	this->len = m.len;
	this->space = new int[this->len];
	for (int i = 0; i < this->len; i++)
	{
		this->space[i] = m.space[i];
	}
	return *this;
}
// 重载 []
int & MyArray::operator [](int i)const
{ 
 	return this->space[i]; 
}
// 重载 <<
ostream & operator << (ostream & os, const MyArray & ma)
{
	for (int i = 0; i < ma.getLen(); i++)
	{ 
		os << ma[i] << " "; 
	}
	return os;
}
// 重载 >>
istream & operator >> (istream & is, MyArray & ma)
{
	cout << "请输入 " << ma.getLen() << " 个数" << endl;
	for (int i = 0; i < ma.getLen(); i++)
	{ 
		is >> ma[i]; 
	}
	return is;
}
3、main 方法调用
#include <iostream>
#include "MyArray.h"
using namespace std;
void main() 
{
	MyArray arr1;		// 声明数组
	MyArray arr2(10);	// 声明一个容量为10的数组
	cin >> arr2;		// 用输入值为数组赋值
	cout << "arr2 : " << arr2 << endl;	// 输出数组
	
	MyArray arr3 = arr2;// 用已有的数组初始化另一个数组
	cout << "arr3 : " << arr3 << endl;	// 输出数组

	arr1 = arr2;		// 用已有的数组给另一个数组赋值
	cout <<"arr1 : "<< arr1 << endl;	// 输出数组

	MyArray arr4(5);	// 给数组添加元素/给数组元素赋值
	for (int i = 0; i < 5; i++) { arr4[i] = i + 10; }
	cout << "arr4 : " << arr4 << endl;	// 输出数组

	// 获取数组指定元素的值
	cout << "arr4 [4] = " << arr4[4] << endl;
}
4、运行结果

在这里插入图片描述

以上。
感谢您的浏览

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义数组类 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 进程的互斥与同步

    一 进程 线程的背景 引入进程 为了描述和实现多个程序的并发执行 以改善资源利用率即提高系统的吞吐量 引入线程 减少程序并发执行时系统所付出的额外开销 使操作系统具有更好的并发性 二 进程的互斥与同步 注意 同步即协调 采用多道程序技术的操
  • xss.haozi.me靶场详解

    xss haozi me靶场详解 前言 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x12 前言 由于
  • sqli-labs靶场challenges第54-75关(超详细)

    目录 第五十四关 单引号闭合 第五十五关 括号闭合 第五十六关 单引号 括号闭合 第五十七关 双引号闭合 第五十八关 单引号闭合报错注入 第五十九关 数字型报错注入 第六十关 双引号 括号闭合 第六十一关 单引号 双括号闭合报错注入 第六十
  • 通过资源本地化技术减少Flink在YARN上的部署时间

    在大数据领域中 Apache Flink是一个流式处理和批处理的开源框架 能够处理高容量和高速度的数据流 在使用Flink时 通常会将其部署在基于YARN Yet Another Resource Negotiator 的集群上 以便充分利
  • win10环境配置jdk8和jdk17切换失效已解决

    配置jdk8环境变量 1 打开环境变量 在系统变量中新建 变量名为JAVA HOME 变量值为jdk8的安装路径D java package jdk8 2 在系统变量中新建 变量名为CLASSPATH 变量值为 JAVA HOME lib
  • 隐私计算和联邦学习发展的举措

    建立大数据隐私计算和联邦学习生态联盟 联邦学习的新商业模式需要一个商业联盟 联盟包含有 N 个实体 加入联盟的实体 可以像朋友圈一样能够利用各自的数据联合建立模型 联邦数据联盟鼓励各方参与 联盟成员一方面进行垂直领域的合作 另一方面 联盟有
  • Centos7安装vmware-tools教程

    一 前言 本教程同样适用Ubuntu系统 虽有些许不同 但总体思路不变 二 安装 1 挂载vmware tools 2 SSH连接Centos虚拟机 ssh root 192 168 2 2 3 创建CD DVD挂载路径 root loca
  • three.js 切割模型动画,并且播放

    因为公司没有人会用blender 所以动画都是用max做的 动画师一般都是会把多个动画做在一个模型上 然后程序中需要使用的话 调用指定的帧数 unity可以把动画切割成animationclip 最近公司使用了需要在three js中添加一
  • Python 高级知识点总结

    Python 高级知识点总结 原文地址 Python 高级知识点总结 一 可迭代对象 迭代器对象和生成器 像list tuple等这些序列是可以使用for in 语句进行遍历输出的 这是为什么呢 这就要需要知道可迭代对象 Iterable
  • 多功能批量剪辑软件一天剪辑1000条原创视频

    下面一个视频用了呆头鹅批量剪辑软件播放量竟然能达到100多万 他是怎么做到的呢 下面我给大家详细的说一下 在短视频平台开展业务 需具备批量制作视频的能力 为了超越同行 需大量更新作品 争取更多曝光 素材准备就绪 导入软件 设置好视频生成数量
  • JS日志输出-console完美封装

    最近在开发一款chrome扩展插件 经常会打印一些调试的日志 然后上生产的时候日志打印的地方总是会有一些漏网之鱼 没有被删掉 控制台还会打印出很多的敏感信息 这是很不合理的 也是不被允许的 鉴于此 对console做了封装 废话不多说 直接
  • 从声通科技的发展来看,AI行业如何回答可持续盈利这一命题?

    AI浪潮下 相关企业头顶新兴技术的光环 脚下是亏损的阴影 尽管业内不同企业身处不同的细分赛道 但是在巨大的成本支出面前 步伐还是有些难迈开 当前 也有一些AI企业希望借助风口在更受投资者关注的舞台施展拳脚 据悉 2023年上半年 赴港IPO
  • JQuery入门

    window jQuery jQuery 选择id用 id div 直接标签名 class 类名 通配符 a div class 多项选择器 div a 空格选择后代 parent gt child 只选择下一层的父子 prev next
  • [计算机网络]简易http server程序

    好久没输出了 知识还是要写下总结才能让思路更加清晰 最近在学习计算机网络相关的知识 来聊聊如何编写一个建议的HTTP服务器 这个http server的实现源代码我放在了我的github上 有兴趣的话可以点击查看哦 HTTP 服务器 HTT
  • QDateEdit设置为空

    背景 使用QT的日期控件 QDateTimeEdit QDateEdit QTimeEdit 时 它们都自带一个默认值 但是在某些情况下 我们不想要这个默认值 通过现有接口没法实现我们的需求 必须通过继承重构的方式实现 参考链接 下面这篇博
  • java 实现DBScan聚类算法

    最近有一个需求 在地图上 将客户按照距离进行聚合 比如 a客户到b客户5km b客户到c客户5km 那么abc就可以聚合成一个集合 首先想到的就是找一个根据坐标来聚合的算法 这里找了一些后来选择了较为简单也符合要求的DBScan聚类算法 它
  • vue处理tabs切换时请求数据不对的应对方法

    vuex 需要处理的请求路径 const whiteUrl api url const cancelAxios state cancelAxiosArr 取消请求token数组 mutations pushAxios state paylo
  • build打包后怎么查看源码 vue_Vue-cli打包后怎么本地查看的操作

    Vue cli打包成dist后默认是必须在http服务器环境下才能正常运行 可以在本地启动一个http server服务查看 操作步骤如下 全局安装http server npm install g http server 进入dist根目
  • 数据结构与算法之二叉树: Leetcode 98. 验证二叉搜索树 (Typescript版)

    验证二叉搜索树 https leetcode cn problems validate binary search tree 描述 给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树 有效 二叉搜索树定义如下 节点的左子树只
  • 自定义数组类

    在学习c 的过程中 我们经常使用到数组 那怎么去定义一个类去实现数组的功能呢 我们先列出一些经常对数组进行的一些操作 1 创建一个指定容量的数组 2 用已有的数组初始化另一个数组 3 用已有的数组给另一个数组赋值 4 给数组添加元素 给数组