c++实现任意类型数组类的封装
MyArray.hpp
#pragma once
#include<iostream>
#include<string>
using namespace std;
template<class T>class MyArray
{
public://构造explicit MyArray(int capacity) //防止隐式类型转换,防止MyArray arr =10{this->m_Capacity = capacity;this->m_Size = 0;this->pAddress = new T[this -> m_Capacity];}MyArray(const MyArray &array){this->m_Capacity = array.m_Capacity;this->m_Size = array.m_Size;this->pAddress = new T[this->m_Capacity];for (int i = 0; i < m_Size; i++){this->pAddress[i] = array[i];}}~MyArray(){if (this->pAddress != NULL){delete[]this->pAddress;this->pAddress = NULL;}}//赋值操作符重载 防止浅拷贝MyArray & operator = (MyArray & array){//先判断原始数据,有就清空if (this->pAddress != NULL){delete[]this->pAddress;this->pAddress = NULL;}this->m_Capacity = array.m_Capacity;this->m_Size = array.m_Size;this->pAddress = new T[this->m_Capacity];for (int i = 0; i < m_Size; i++){this->pAddress[i] = array[i];}}//[]重载/*MyArray arr(10)arr[0] = 100;*/T & operator [](int index){return this->pAddress[index];}//尾插法void push_Back(T val){this->pAddress[this->m_Size] = val;this->m_Size++;}//获取大小int getSize(){return m_Size;}//获取容量int getCapacity(){return m_Capacity;}private:T * pAddress; //指向堆区指针int m_Capacity; //容量int m_Size;
};
test.cpp
#include"MyArray.hpp"
#include<string>
#include<iostream>
using namespace std;
//输出int 类型数组
void printIntArray(MyArray<int>&array)
{for (int i = 0; i < array.getSize(); i++){cout << array[i] << endl;}
}
class Person
{
public://默认构造Person(){}Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};//输出Person类型的数组
void printPersonArray(MyArray<Person > &array)
{for (int i = 0; i < array.getSize(); i++){cout << "姓名:" << array[i].m_Name << "年龄:" << array[i].m_Age << endl;}
}int main()
{MyArray<int>arr(10);for (int i = 0; i < 10; i++){arr.push_Back(i + 100);}printIntArray(arr);Person p1("MT", 10);Person p2("呆贼", 12);Person p3("傻馍", 13);Person p4("劣人", 14);MyArray<Person>arr2(10);arr2.push_Back(p1);arr2.push_Back(p2);arr2.push_Back(p3);arr2.push_Back(p4);printPersonArray(arr2);system("pause");return 0;
}
c++实现任意类型数组类的封装相关推荐
- java 数组的长度如何增加,用Java动态增加任意类型数组的长度
用Java动态增加任意类型数组的长度 如果你需要动态增加数组大小: public int[] expandArray(int[] a, int size) { if (size < ...
- java自定义一个数组类(封装多种方法)
一.自定义数组类的动机 java给定的数组为静态的,我们是无法对齐进行灵活的操作,比如指定位置添加元素,删除元素,判断是否非空等,于是我们便需要利用"面向对象"的设计模式,自定义一 ...
- Golang 为什么不能直接将任意类型数组赋值给 []interface{}完成泛型操作
想用 []interface{} 类型来接受一个任意类型的数组,从而进行泛型操作时,发现直接赋值会发生错误,导致 panic var dataSlice []int = foo() var inter ...
- 数据结构与算法:动态数组(利用万能指针实现任意类型数组操作)
原理介绍 我们利用万能指针来实现动态数组,数组元素类型可以是任意类型,因为我们只维护用户提供的数据的地址,所以可以用万能指针来接受,这样就实现了类似C++中的模板功能了. 先说说动态数组和静态数组.静 ...
- 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器
1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...
- 基本类型数组转包装类型数组工具类
/*** @author: YXY* @date: 2021/7/13 10:56* @Version 1.0*/ /*** 基本类型数组与包装类型数组相互转换的工具类*/ public class ...
- java练习(数组工具类的封装)[目前写过最长的代码,虽然不难]
java练习(数组工具类的封装)[目前写过最长的代码,虽然不难] package myUtil.arrayUtil;public class ArraysUtil {/*** 升序排列一个byte数组 ...
- 使用函数指针来编写一个名叫sort的函数,它用于对一个任意类型的数组进行排序。
编写一个名叫sort的函数,它用于对一个任意类型的数组进行排序.为了使函数更为通用,它的 其中一个参数必须是一个指向比较回调函数的指针,该回调函数由调用程序提供.比较函数接受 两个参数,也 ...
- C语言基础入门48篇_26_身份证号校验程序(以身份证的校验方式是实例加深对数组及函数封装的理解、字符-‘0‘得到字符对应的int类型数字)
本篇根据以二代身份证的校验方式是实例加深对数组及函数封装的理解 1. 第二代身份证号的组成 第二代身份证号为18位,各位数字对应了不同的信息(以下顺序从左往右): AABBCCYYYYMMDDXXXV ...
最新文章
- Java String和Date的转换 Date类型操作
- 魔方微店商城系统 v1
- 软考信息安全必备考点
- 海报样机模型帮助以专业的方式展示你的设计
- SPSS 多重共线性问题【SPSS 039期】
- 关于switchhosts的一些问题
- PowerBuilder 开发的游戏(建房子)
- 三角波的傅里叶变换对_傅里叶变换推导详解
- inurl:faq.php?action=,什么是财富等级 | 帮助 | 酷狗直播 | 就是歌手多
- php展厅控制系统,展厅展馆设计智能中控系统
- Bingo学习--redis
- hosts文件位置以及如何修改hosts文件【Windows】【以github为例】
- docker搭建rap2
- C++ 16进制日志输出 每行右侧ASII输出
- 解决tensorflow.python.framework.errors_impl.InvalidArgumentError: indices[0,32] = -1 is not in [0, 50)
- python容器类型-字典
- 并查集(Union-Find) (图文详解)
- 微信支付『支付失败,如果已扣款,资金在0-3个工作日原路返回』踩坑案例及解决方案
- 增量式编码器的工作原理与使用方法
- 使用私服管理jar时,下载jar出现 lastUpdated问题 maven
热门文章
- @Resource和@Autowired作用和区别
- Java12题:发奖金问题
- HTTP 错误500.19 -Internal Server Error
- Android----获取activity上所有的控件
- CSS Hack 汇总快查
- add separator in the sessionmenu
- c语言最大公约数和最小公倍数_五年级奥数课堂之七:公因数和公倍数
- 绝地求生 android版支持蓝牙吗,《绝地求生》吃鸡必须要顶配吗?这些配置也能畅玩...
- 启动oracle数据库工具,Oracle数据库常用工具
- 前端微信签名验证工具_微信小程序API 用户数据的签名验证和加解密