首页 > 编程语言 >C++类模板案例-数组类封装

C++类模板案例-数组类封装

时间:2024-08-21 10:55:17浏览次数:14  
标签:arr Capacity pAddress C++ int MyArray 封装 模板 Size

#include<iostream>
using namespace std;

template<class T>
class MyArray
{
public:
	MyArray(int capacity)
	{
		this->m_Capacity = capacity;
		this->m_Size = 0;
		this->pAddress = new T[this->m_Capacity];
	}

	~MyArray()
	{
		if (this->pAddress != NULL)
		{
			delete[] this->pAddress;
			this->pAddress = NULL;
			this->m_Capacity = 0;
			this->m_Size = 0;
		}
	}

	//拷贝函数(深拷贝)
	MyArray(const MyArray& arr)
	{
		this->pAddress = new T[arr.m_Capacity];
		this->m_Capacity = arr.m_Capacity;
		this->m_Size = arr.m_Size;

		for (int i = 0; i < arr.m_Size; i++)
		{
			this->pAddress[i] = arr[i];
		}
	}

	//等号重载
	MyArray& operator=(const MyArray &arr)
	{
		if (this->pAddress != NULL)
		{
			delete[] this->pAddress;
			this->pAddress = NULL;
			this->m_Capacity = 0;
			this->m_Size = 0;
		}

		this->pAddress = new T[arr.m_Capacity];
		this->m_Capacity = arr.m_Capacity;
		this->m_Size = arr.m_Size;

		for (int i = 0; i < arr.m_Size; i++)
		{
			this->pAddress[i] = arr[i];
		}

		return *this;
	}

	//重载[]获取任意值
	T& operator[](const int index)
	{
		return this->pAddress[index];
	}

	//尾插法加入值
	void Push_back(const T& val)
	{
		if (this->m_Size == this->m_Capacity)
		{
			return;
		}
		this->m_Size++;
		this->pAddress[this->m_Size] = val;
	}

	//尾删法删除值
	void Pop_back()
	{
		if (this->m_Size == 0)
		{
			return;
		}
		this->m_Size--;
	}

	int getCapacity()
	{
		return this->m_Capacity;
	}

	int getSize()
	{
		return this->m_Size;
	}

private:
	int m_Capacity;
	int m_Size;
	T* pAddress;
};

标签:arr,Capacity,pAddress,C++,int,MyArray,封装,模板,Size
From: https://blog.csdn.net/weixin_47768406/article/details/141387950

相关文章

  • VSCode系列 - 如何用VSCode搭建C++高效开发环境(2)
    1.插件的用法1.1.C/C++1.1.1.插件介绍1.1.2.插件配置1.2.Clang-Format1.3.cpp-check-lint1.3.1.cpplint1.3.2.cppcheck1.3.3.插件的使用1.4.C/C++AdvancedLint1.4.1.插件介绍1.4.2.插件配置1.5.BracketPairColorizer1.5.1.插件介绍1.......
  • 参诸文籍, 带你深入理解C/C++复杂指针声明
    参诸文籍,带你深入理解C/C++复杂指针声明本文参考的相关文章已置于页脚文章目录参诸文籍,带你深入理解C/C++复杂指针声明一.引言二.C/C++运算符优先级三.简单表达式一.`int*p;`二.`int**pp;`四.==解读C声明的“右左”规则`[重要]`==(一)、符号含义(二)......
  • 【Vue】模板语法
    系列文章目录第三章模板语法文章目录系列文章目录前言一、文本:二、显示原生的HTML三、属性绑定四、使用JavaScript表达式:五、条件判断:六、v-show和v-if:七、循环1.循环数组2.循环对象3.保持状态4.触发视图更新5.覆盖数组八、事件绑定1.基本使用2.传入event参......
  • C++运算符优先级
    优先级操作符描述例子结合性1()[]->.::++--调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作用域操作符后置自增操作符后置自减操作符(a+b)/4;array[4]=2;ptr->age=34;obj.age=34;Class::ag......
  • Python--面向对象编程:封装、继承和多态
    在面向对象编程(OOP)中,封装、继承和多态是三个核心的概念,掌握它们有助于更好地设计和开发复杂的软件系统。以下是对这三个概念的详细介绍:1.封装(Encapsulation)封装指的是将对象的状态(属性)和行为(方法)隐藏在对象内部,不暴露给外界。外界只能通过对象提供的接口(即公开的方法)来访问......
  • BST 二叉搜索树 BinarySearchTree C++实现(递归/非递归)
    目录二叉搜索树基本概念常用结论用途二叉搜索树的性能分析二叉搜索树的操作查找插入删除代码实现BSTree.hpptest.cc二叉搜索树基本概念二叉搜索树(BST,BinarySearchTree)二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树......
  • 排序算法 排序性能测试代码(随机数调整,高精度时间) - C++
    目录测试工具源码testsort测试工具C++11标准库<chrono>中高精度计时器,时间精度可以达到1纳秒.C++11标准库<random>中随机数生成器,可以实现各类随机数,本测试主要用于实现9成随机数下排序性能源码源码我拆分成两部分,一部分为测试,一部分为sort源码.合并一起使用test......
  • VSCode系列 - 如何用VSCode搭建C++高效开发环境(1)
    VSCode是笔者用过的最好用的开发工具,没有之一。笔者14年的码龄生涯中,先后用过Eclipse、IntelliJIDEA、WebStorm、PyCharm、VisualStudio(2010/2013/2015)、NetBeans、SublimeText等,但自从用VSCode之后,就再没换过其他工具,一直用到现在有5年多的时间。1.本文目标这篇文......
  • [YM]模板-堆
    概念:堆是一种树形结构,堆顶始终是最优值(最大或最小)。堆一般是用二叉树实现的,称为二叉堆。二叉堆是一种完全二叉树堆由对顶可以分为大根堆和小根堆 ————————————————————————————————堆一般用数组去实现:用数组A[]存储完全二叉树,节点数......
  • WPF:数据模板
    WPF:DataTemplate在XAML界面当中编写的任何代码,其实本质上都是转化成C#代码,既然如此来说,只要XAML有的对象,我们都可以用C#代码编写,但是为什么一般我们不这么做,是因为XAML更加容易去表达界面上的元素,代码的可视化以及可维护性。需求:当我想要在ListBox或者DataGridView......