一个基于指针和重载操作符的数组类设计Array,可以进行数组范围检查,与平常看到的类而言,这个类的编写让人感觉逻辑十分清晰,以及更加可以理解面向对象程序设计理念。

Arry.h

/*-----防止类头文件重复包含--------------------------------------*/
#ifndef ARRAY_H
#define ARRAY_H
/*-----包含输入输出流头文件--------------------------------------*/
#include <iostream>
using namespace std;
class Array
{/*-----重载输入输出符号的友元函数--------------------------------------*/friend ostream &operator<<(ostream &,const Array &);friend ostream &operator>>(iostream &,Array &);
public:explicit Array(int = 10);//默认构造函数Array(const Array &);//拷贝构造函数~Array();//析构函数size_t getSize() const; //得到数组大小const Array &operator=( const Array & );//重载操作符=bool operator==(const Array &)const;//重载操作符==bool operator !=(const Array &right)const//重载操作符!={return !(*this==right);}int &operator[]( int );//重载操作符[]int operator[]( int )const;//重载操作符[]
private:size_t size;//数据成员size标识数组大小int *ptr;//数组指针
};
#endif;

Array.cpp

/*-----Array类的函数定义和友元函数定义-------------------------------------*/
#include <iostream>
#include <iomanip>
#include <stdexcept>
#include "Array.h"
using namespace std;/*------Array类的默认构造函数,数组大小为10--------------------------------*/
Array::Array(int arraysize):size( arraysize>0?arraysize:throw invalid_argument("Arrat size must be greater than 0")),ptr(new int [size])
{for (size_t i=0;i<size;++i){ptr[i]=0;}}/*-----Array类的拷贝构造函数----------------------------------------------*/
Array::Array(const Array &arrayToCopy):size(arrayToCopy.size),ptr(new int [size])
{for (size_t i=0;i<size;++i){ptr[i]=arrayToCopy.ptr[i];}
}/*-----Array类的析构函数---------------------------------------------------*/
Array::~Array()
{delete [] ptr;
}/*-----得到数组的大小-----------------------------------------------------*/
size_t Array::getSize() const
{return size;
}/*-----重载=操作符--------------------------------------------------------*/
const Array &Array::operator =(const Array &right)
{if (*right != this)//避免自己给自己赋值{//如果两个数组的大小不一样,那就先释放原有数组//然后声明与右边数组大小一样的数组if (size != right.size){delete [] ptr;size =right.size;ptr=new int[size];}//进行赋值for (size_t i=0;i<size;++i){ptr[i]=right.ptr[i];}}return *this;
}/*-----重载==操作符-------------------------------------------------------*/
bool Array::operator ==(const Array &right)const
{if (size != right.size)//如果两个数组的大小不一样,直接返回false{return false;}for (size_t i=0;i<size;++i)//如果数组一样,比较对应的元素是否一样,如果不一样,返回false{if (ptr[i] != right.ptr[i]){return false;}}return true;//不然返回true
}/*-----重载[]操作符-------------------------------------------------------*/
int &Array::operator [](int subscript)
{if (subscript<0||subscript>=size){throw out_of_range("Subscript out of range");}return ptr[subscript];
}/*-----重载[]操作符-------------------------------------------------------*/
int Array::operator [](int subscript) const
{if (subscript<0||subscript>=size){throw out_of_range("Subscript out of range");}return ptr[subscript];
}/*-----友元函数,重载输入运算符>>----------------------------------------*/
iostream &operator>>(istream &input,Array &a)
{for (size_t i=0;i<a.size;++i){input>>a.ptr[i];}return input;
}
/*-----友元函数,重载输入运算符<<----------------------------------------*/
ostream &operator<<(ostream &output,const Array &a)
{for (size_t i=0;i<a.size;++i){output<<setw(12)<<a.ptr[i];if ((i+1)%4==0){output<<endl;}}if (a.size%4 !=0){output<<endl;}return output;
}

如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。

一个让人灵光一闪的数组C++类Array设计,可以此作为范本进行其他的C++类编写相关推荐

  1. 编写程序,从键盘输人 10个整数,之间以一个空格隔开,存放在一维数组中。找出值最大和最小的元素,第一行输出最大值及其所在的元素下标,之间以一个空格隔开;第二行输出最小值及其所在的元素下标,之间以一个空

    题目:编写程序,从键盘输人 10个整数,之间以一个空格隔开,存放在一维数组中.找出值最大和最小的元素,第一行输出最大值及其所在的元素下标,之间以一个空格隔开;第二行输出最小值及其所在的元素下标,之间以 ...

  2. 一个IT人士的个人经历,给迷失方向的朋友

    文章来源于网络. 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来 ...

  3. 一个让人感伤又温馨的计算机故事(转)

    转自:http://blog.jobbole.com/38063/ 一个让人感伤又温馨的计算机故事 2013/04/12 | 分类: 趣文漫画 | 9 条评论 | 标签: CPU, 主板, 内存, 硬 ...

  4. 10分钟教对象搭建了一个多人聊天室~

    Demo演示 体验demo链接: http://socket.vjscoder.com/websocket-chatroom/index.html#/ 去github查看完整源码: https://g ...

  5. 一个IT人士的个人经历,给迷失方向…

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能 ...

  6. [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

    请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组. 刚开始复习js题还不太习惯 CSDN上看了一个帖子,说是牛客上的标答, ...

  7. 结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

    结构体中最后一个成员为[0]长度数组的用法:这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势:(1).不需要初始化,数组名直接就是所在的偏移:(2).不占任何空间,指针需要占 ...

  8. 介绍一个懒人创建springmvc项目的方法(二)

    PS: 我是一个懒人,我懒得搭建项目连pom都不想去找,连web.xml都不想配置.所以就会想着找一些简便的办法,来适应我这种懒人. ---------------------------- 本人介绍 ...

  9. 一个浙江人的23条经典经商法则

    一个浙江人的23条经典经商法则 1.坚持看CCTV-1新闻联播.  要想把握经济命脉,必须关注政局,新闻联播图文并茂,有声有色,着实为中国商人的最佳晴雨表.  2.不要轻易相信合约或合同  哪怕合约让 ...

最新文章

  1. 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d-2.0-x-2.0.2使用资源加载策略
  2. c++矩阵作为函数输入变量_C++实现矩阵乘法
  3. window下的host路径
  4. git 删除本地仓库中的分支_本地 Git 仓库与 GitHub 关联
  5. 里rust怎么找蓝图_Rust错误处理
  6. 弹性架构_实践中的弹性基础架构
  7. 《剑指offer》全解(图文结合,通俗易懂,一篇看爽)
  8. LayaAir-图集动画
  9. UVa10491 Cows and Cars
  10. 【图像修复】基于matlab GUI Lucy_Richardson迭代法图像修复【含Matlab源码 846期】
  11. 【预测模型】基于BP神经网络预测股票matlab代码
  12. Windows电脑怎么卸载服务/删除服务?
  13. 运营级如意影视源码+完整类库/无限增删解析API
  14. 想自学HCIE,有什么好的书籍推荐吗?
  15. 喜洋洋大战灰太狼(大结局)
  16. 资深项目经理推荐的几款免费/开源项目管理工具
  17. 全面了解风控指标体系
  18. KubernetesDatabase-k8s中helm方式安装postgresql及pgadmin
  19. java任务系统设计_任务调度系统-任务依赖的设计
  20. windows下的OpenGL视频播放器开发环境

热门文章

  1. TPM零知识学习一 —— 初识
  2. 飞腾CPU体系结构之虚拟地址
  3. java计算机毕业设计邻里平台源码+系统+mysql数据库+lw文档
  4. 读万卷书不如行万里路?
  5. 用FPGA实现光端机HDB3编码设计
  6. 移动web 空间转换 3D
  7. PostgreSQL函数——时间函数
  8. 【转】cpu降频问题
  9. ijkplayer 学习笔记
  10. 这18条背下来没人敢和你忽悠CPU