#include<iostream>
using namespace std; template<class T>
class MyArray
{
public:
//构造函数
MyArray<T>(int capacity) {
this->setmCapacity(capacity);
//this->mCapacity = capacity mCapacity是public才这样用
this->mSize = 0;
//申请内存
this->pAddr = new T[this->mCapacity];
} //拷贝,const保证不改变原来的 MyArray
MyArray<T>(const MyArray<T>& arr) {
this->mCapacity = arr.mCapacity;
this->mSize = arr.mSize;
this->pAddr = new T[this.mCapacity];
//数据拷贝
for (int i = 0; i < this.mSize;i++) {
this->pAddr[i] = arr.pAddr[i];
}
} //重载 [] 运算符
T& operator[](int index) {
return this->pAddr[index];
} //重载 = 运算符
MyArray<T>& operator=(const MyArray<T>& arr) { if (this->pAddr != NULL) {
delete[] this->pAddr;
}
this->mSize = arr.mSize;
this->mCapacity = arr.mCapacity;
//申请内存空间
this->pAddr = new T[this->mCapacity];
//数据拷贝
for (int i = 0; i < this->mSize; i++) {
this->pAddr[i] = arr.pAddr[i];
}
return *this;
} //添加元素
void PushBack(T& data) {
//判断容器中是否有位置
if (this->mSize >= this->mCapacity) {
return;
} //调用拷贝构造 =号操作符
//1. 对象元素必须能够被拷贝
//2. 容器都是值寓意,而非引用寓意 向容器中放入元素,都是放入的元素的拷贝份
//3 如果元素的成员有指针,注意深拷贝和浅拷贝问题
this->pAddr[this->mSize] = data;
//msize++
this->mSize++;
} /*
定义第二个pushback()函数的意义在于可以直接传入数据,例如
arr.pushback(50);
左值表示可以在多行使用的值
右值一般表示临时变量,只能在当前行使用
这里的50是一个右值
两个&&表示对右值取引用
*/ void PushBack(T&& data) {
//判断容器中是否有位置
if (this->mSize >= this->mCapacity) {
return;
}
this->pAddr[this->mSize] = data;
//msize++
this->mSize++;
} /*
mCapacity是private
*/
int getmCapacity(int capacity) {
return this->mCapacity;
}
void setmCapacity(int capacity) {
this->mCapacity=capacity;
} //析构函数
~MyArray() {
if (this->pAddr != NULL) {
delete[] this->pAddr;
}
}
public:
//当前数组有多少元素
int mSize;
//保存数据的首地址
T* pAddr; private:
//一共可以容下多少个元素
int mCapacity;
}; void test01() { MyArray<int> marray(20);
int a = 10, b = 20, c = 30, d = 40;
marray.PushBack(a);
marray.PushBack(b);
marray.PushBack(c);
marray.PushBack(d); //不能对右值取引用
//左值 可以在多行使用
//临时变量 只能当前行使用
marray.PushBack(100);
marray.PushBack(200);
marray.PushBack(300); for (int i = 0; i < marray.mSize; i++) {
cout << marray[i] << " ";
}
cout << endl;
} class Person {};
void test02() {
Person p1, p2;
MyArray<Person> arr(10);
arr.PushBack(p1);
arr.PushBack(p2);
} int main()
{
test01();
test02();
return 0;
}

MyArray框架搭建与实现的更多相关文章

  1. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  2. 一步一步使用ABP框架搭建正式项目系列教程之本地化详解

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...

  3. ABP框架搭建项目系列教程基础版完结篇

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 经过前面十二篇的基础教程,现在终于该做个总结了. 回顾 第一篇,我们建议新手朋友们先通过ABP官网的启动模板生成解决方案,因为这样 ...

  4. 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】

    经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...

  5. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  6. 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务

    一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...

  7. 关于使用ABP框架搭建的项目升级时需要注意的问题汇总

    ABP理论学习总目录 一步一步使用ABP框架搭建正式项目系列教程 ABP之Module-Zero学习目录 本篇目录 说明 升级方法 问题_01:Log4Net导致编译不成功 2015/12/18更新 ...

  8. ssh框架搭建的基本步骤(以及各部分作用)

    ssh框架搭建的基本步骤(以及各部分作用)     一.首先,明确spring,struts,hibernate在环境中各自的作用.   struts: 用来响应用户的action,对应到相应的类进行 ...

  9. 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)

    android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比  转载请注明http://w ...

随机推荐

  1. moviepy音视频剪辑基类VideoClip的write_gif方法opt、fuzz、dispose、colors、loop等参数的作用

    ☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类write_gif方法用于将视频剪辑输出到gif文件,调用语法如下: def write_gif(self, fil ...

  2. upload 注意php远程安全模式屏蔽函数

    进来:上传一个一句话php,果然不行:改成jpg后缀,上传成功:接着写一个.htaccess文件去把.jpg解析成.php,如下: AddType application/x-httpd-php .j ...

  3. CTF写脚本

    今天总结一下CTF如何写脚本快速得分....(比较菜,能力有限,大佬勿喷) 所谓的写脚本得分,就是利用了 python爬虫的思想,如果之前没有听说过的话,可以去爬虫的相关语法.如果是看网上的视频的话, ...

  4. Samba服务器搭建,匿名访问,用户密码访问

    环境 #服务端:centos7 客户端:centos7,windows10 配置yum源,使用光盘镜像安装Samba服务 #挂载光盘:mount  /dev/sr0  /mnt/cdrom #安装sa ...

  5. pandas 处理缺失值(连续值取平均,离散值fillna"<unk>")

    # 2.1处理缺失值,连续值用均值填充 continuous_fillna_number = [] for i in train_null_ix: if(i in continuous_ix): me ...

  6. 【题解】「CF1182B」Plus from Picture

    这是一道超级水的模拟 + 简单搜索. 说说思路: 先找到中心点,就是自己和上下左右都为 * 的. 上下左右上的所有 * 都删掉,然后再看看有没有多余的 * 如果有输出 NO 否则输出 YES. 比如说 ...

  7. 如何写好商用PPT,计算机行业PPT模板

    如何写好商用PPT,这个问题如果从0开始写那确实需要花费一番功夫,今天我不是来教你如何做PPT,而是教你如何从一个小白如何快速能套用模板,从而做出一个自己行业相关的模板,比如计算机行业PPT模板,奶茶 ...

  8. 使用纯js 不导包实现 table 导出 Excel

    1.将js粘贴到项目 2.设置table标签 id3.定义按钮,调用方法即可 1 <!DOCTYPE html> 2 <html lang="zh_CN"> ...

  9. 揭开DRF序列化技术的神秘面纱

    在RESTful API中,接口返回的是JSON,JSON的内容对应的是数据库中的数据,DRF是通过序列化(Serialization)的技术,把数据模型转换为JSON的,反之,叫做反序列化(dese ...

  10. Cloudera Manager API使用

    Cloudera Manager提供了很多API供用户进行访问,因此可以利用其提供的API进行大数据集群中各种服务的状态检测.监控以及服务的启停操作. 版本信息 Cloudera Manager 6. ...