动态分配数组C++模板
来源:互联网 发布:拱拱淘宝工具箱下载 编辑:程序博客网 时间:2024/06/05 00:36
通过动态分配的方法实现了动态数组的创建,其中包括多种运算符重载。
#include#define SIZE 100using namespace std;template class Array {private: T *m_data; int length;//数组长度public: //无参构造函数 Array() { length = 0; m_data = new T[SIZE]; } //有参构造函数,参数为数组的长度 Array(int n) : length(n) { m_data = new T[length]; } //有参构造函数,参数为数组的长度和初始化元素 Array(int n, T x) : length(n) { m_data = new T[length]; for (int i = 0; i < length; i++) m_data[i] = x; } //拷贝构造函数 Array(const Array &rhs) { length = rhs.length; m_data = new T[length]; for (int i = 0; i < length; i++) m_data[i] = rhs.m_data[i]; } //析构函数 ~Array() { length = 0; delete[] m_data; } //返回数组长度 int size() const { return length; } //重载+运算符 Array operator+(Array &rhs) { Array sum; if (this->length > rhs.length) sum.length = rhs.length; else sum.length = this->length; for (int i = 0; i < sum.length; i++) sum.m_data[i] = this->m_data[i] + rhs.m_data[i]; return sum; } //重载-运算符 Array operator-(Array &rhs) { Array sub; if (this->length > rhs.length) sub.length = rhs.length; else sub.length = this->length; for (int i = 0; i < sub.length; i++) sub.m_data[i] = this->m_data[i] - rhs.m_data[i]; return sub; } //重载==运算符 bool operator==(Array &rhs) { int count = 0; if (length == rhs.length) { for (int i = 0; i < length; i++) { if (m_data[i] == rhs.m_data[i]) count++; } if (count == length) return true; else return false; } else return false; } //重载[]运算符 int &operator[](int index) { if (index < 0 || index >= length) throw "invalid index"; return m_data[index]; } //重载=运算符 void operator=(Array &rhs) { length = rhs.length; for (int i = 0; i < length; i++) m_data[i] = rhs.m_data[i]; } //输出运算符<< friend ostream &operator<<(ostream &output, const Array &rhs) { for (int i = 0; i < rhs.length; i++) output << rhs.m_data[i] << " "; return output; } //输入运算符>> friend istream &operator>>(istream &input, Array &rhs) { while (input >> rhs.m_data[rhs.length]){rhs.length++;} return input; }};int main(){ try { Array a1; cout << "Please input a1: "; cin >> a1; cout << "a1: " << a1 << endl; a1[0] = 5, a1[1] = 6; cout << "a1: " << a1 << endl; Array a2(a1); cout << "a2: " << a2 << endl; Array a3 = a2; cout << "a3: " << a3 << endl; cout << "a1 == a2 " << (a1 == a2) << endl; cout << "a2 == a3 " << (a2 == a3) << endl; Array a4 = a1 + a2 - a3; cout << "a4: " << a4 << endl; } catch (const char *msg) { cout << msg << endl; } return 0;}
阅读全文
0 0
- 动态分配数组C++模板
- c动态分配 数组指针
- C 语言动态分配数组
- C语言动态分配数组
- C语言动态分配二维数组
- C实现动态分配三维数组
- C语言动态分配二维数组
- C/C++动态分配二维数组
- c语言中动态分配数组
- C语言中动态分配数组
- C语言中动态分配数组
- C语言二维数组动态分配
- C语言动态分配二维数组
- C/C++动态分配二维数组
- C语言中动态分配数组
- C语言中动态分配数组
- C语言动态分配二维数组
- 【C语言】数组--动态分配数组大小
- TextureView+SurfaceTexture+OpenGL ES来播放视频(一)
- 利用zxing和zbar 实现扫一扫功能
- 装饰模式
- nginx+lua 构建waf防火墙
- Spark中自定义排序
- 动态分配数组C++模板
- 公司做网站选择建站的几大原则
- 泛型集合List<T> 的详细用法
- Android剪裁图片
- 【笔记】ZooKeeper的安装与配置(单节点)
- MySQL的备份与恢复
- iOS跳转设置界面的多个url
- 处理大并发之一 对异步非阻塞的理解
- 线程安全和非安全用例