首页 > 其他分享 >65. 类模板应用 – 数组类封装

65. 类模板应用 – 数组类封装

时间:2024-09-02 15:25:38浏览次数:10  
标签:arr 封装 pAddress MyArray int 65 Capacity 模板 Size


  • 类模板应用 – 数组类封装
  • 将类写到 myArray.hpp中
  • 属性:
  • T * pAddress; 指向堆区数组指针
  • int m_Capacity 数组容量
  • int m_Size ;数组大小
  • 行为
  • myArray(int capacity)
  • myArray(const MyArray & arr)
  • operator=
  • operator[]
  • ~myArray()
  • getCapacity
  • getSize
  • pushback

myArray.hpp

#pragma  once 
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

template<class T>
class MyArray
{
public:
	//MyArray(){};

	//有参构造
	MyArray(int capacity)
	{
		this->m_Capacity = capacity;
		this->m_Size = 0;
		this->pAddress = new T[this->m_Capacity];
	}

	//拷贝构造
	MyArray(const MyArray & arr)
	{
		this->m_Capacity = arr.m_Capacity;
		this->m_Size = arr.m_Size;
		this->pAddress = new T[this->m_Capacity];
		for (int i = 0; i < arr.m_Size;i++)
		{
			this->pAddress[i] = arr.pAddress[i];
		}
	}

	//重载=   
	MyArray& operator=( const MyArray & arr)
	{
		if (this->pAddress)
		{
			delete[] this->pAddress;
			this->pAddress = NULL;
		}

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


	//重载[] 
	T& operator[] (int index)
	{
		return this->pAddress[index];
	}

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

	//获取数组容量
	int getCapacity()
	{
		return this->m_Capacity;
	}

	//获取数组大小
	int getSize()
	{
		return this->m_Size;
	}

	//析构
	~MyArray()
	{
		if (this->pAddress)
		{
			delete[] this->pAddress;
			this->pAddress = NULL;
		}
	}

private:
	T * pAddress; //指向堆区真实数组指针

	int m_Capacity; //数组容量

	int m_Size;  //数组大小

};

类模板应用-数组类封装.cpp

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include "myArray.hpp"
#include <string>

class Person
{
public:
	Person(){};
	Person(string name,int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	string m_Name;
	int m_Age;
};

void myPrintInt(MyArray <int> &myIntArr)
{

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

void test01()
{
	MyArray <int> myIntArr(100);
	for (int i = 0; i < 10;i++)
	{
		myIntArr.pushBack(i + 100);
	}
	myPrintInt(myIntArr);

}

void myPrintPerson(MyArray<Person> &myPersonArr)
{
	for (int i = 0; i < myPersonArr.getSize();i++)
	{
		cout << "姓名: " << myPersonArr[i].m_Name << " 年龄:" << myPersonArr[i].m_Age << endl;
	}
}

void test02()
{
	MyArray<Person> myPersonArr(100);
	Person p1("孙悟空", 1000);
	Person p2("猪八戒", 800);
	Person p3("唐僧", 500);
	Person p4("沙悟净", 300);
	Person p5("白龙马", 10000);

	myPersonArr.pushBack(p1);
	myPersonArr.pushBack(p2);
	myPersonArr.pushBack(p3);
	myPersonArr.pushBack(p4);
	myPersonArr.pushBack(p5);

	myPrintPerson(myPersonArr);

	cout << "数组容量: " << myPersonArr.getCapacity() << endl;
	cout << "数组大小: " << myPersonArr.getSize() << endl;
}

int main(){

//	test01();
	test02();

	system("pause");
	return EXIT_SUCCESS;
}


标签:arr,封装,pAddress,MyArray,int,65,Capacity,模板,Size
From: https://blog.51cto.com/zaishu/11898423

相关文章

  • 64. 类模板碰到友元函数
    类模板碰到友元的问题以及解决友元类内实现friendvoidprintPerson(Person<T1,T2>&p)友元类外实现声明:friendvoidprintPerson2<>(Person<T1,T2>&p);实现:template<classT1,classT2>-voidprintPerson2(Person<T1,T2>&p){。。。}......
  • 多重背包问题 模板 C++实现
    问题:有n 种物品和一个容量是c 的背包。第i种物品最多有num[i-1] 件,每件体积是weight[i-1],价值是value[i-1]。求解将哪些物品装入背包,可使物品重量总和不超过背包容量,且价值总和最大。输出最大价值。算法1:三重循环内层循环用于考虑当前物品i可......
  • FMC子卡设计资料:165-2路万兆光纤SFP+ FMC子卡模块
    1.概述该板卡是基于kc705和ml605的fmc10g万兆光纤扩展板设计。SFP+(10GigabitSmallFormFactorPluggable)是一种可热插拔的,独立于通信协议的光学收发器,通常传输光的波长是850nm,1310nm或1550nm,用于10Gbps的SONET/SDH,光纤通道,gigabitEthernet,10gigabitEthernet和......
  • 对象池泛型模板
    对象池泛型模板delphi和lazarus都适用。泛型配合继承,无敌的存在。//cxg2024-9-2//对象池的泛型模板unitsys.pool;{$idef.inc}interfaceuses//system--------Generics.Collections,Classes,SysUtils;typeTPool<T>=classprivate//连接池的空闲......
  • sqli-labs靶场通关攻略(61-65)
    Less-61步骤一:查看数据库?id=1'))andupdatexml(1,concat(1,(selectdatabase())),1)--+步骤二:查看表名?id=1'))andupdatexml(1,concat(1,(selectgroup_concat(table_name)frominformation_schema.tableswheretable_schema='security')),1)--+步骤三:查看use......
  • Microsoft 365 解决方案:数据备份的必要性、配置架构
    51CTO博客链接:https://blog.51cto.com/u_13637423业务连续性保障是许多公司最关心的问题。如果发生加密大量数据的勒索软件攻击,或者内部意外或恶意数据删除或覆盖事件的实例,则需要能够尽快使业务恢复正常状态。这是Microsoft365备份产品提供的功能,无论是通过Microsoft365管......
  • 模板2
    字符串KMPnxt[i]:$b[1:i]$的最长border$b[1:nxt_i]$,且$nxt_i<i$。voidinit(){intp=0;F(i,2,m){while(p&&b[p+1]!=b[i])p=nxt[p];//p+1尝试与i匹配if(b[p+1]==b[i])p++;nxt[i]=p;}}voidkmp(){intp=0;F(i,1,n){......
  • 六大排序(算法详解+模板+例题)
    一.排序算法是什么排序算法(SortingAlgorithms)是一种数据结构操作,它的目的是将一串元素按照特定的顺序规则组织起来。常见的排序算法有升序(从小到大)和降序(从大到小)排列,如冒泡排序、希尔排序、插入排序、选择排序、快速排序、归并排序等。排序的主要目的是为了方便查找、分析数......
  • 20240901_161659 编程剪辑项目列表
    资料20240901_161503编程剪辑相关列表_鲸鱼编程pyhui的技术博客_51CTO博客https://blog.51cto.com/u_13137233/11889402项目20240901_151114python项目获取需要的视频_鲸鱼编程pyhui的技术博客_51CTO博客https://blog.51cto.com/u_13137233/11889375......
  • [开题报告]flask框架的场馆预订系统的设计与实现d6551(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今社会,随着人们健康意识的增强和体育运动的普及,体育场馆作为人们进行体育锻炼的重要场所,其管理和预订方式的高效性、便捷性显得尤为重......