使用模板创建二维数组

来源:互联网 发布:淘宝卖家国际转运服务 编辑:程序博客网 时间:2024/06/06 23:57
/*使用模板类创建数组 以及 二维数组(模板类递归)*/#include <iostream>using namespace std;template<typename T = int, size_t S = 5>   //默认类型参数 和 非类型参数(只能传递常量/常变量/常量表达式)class Array{private:T m_array[S];public:/*操作符[]重载,两个函数可以重载第一个函数:形参:可以传入常量、变量,但是不能改num的值  返回值: 可以做左值    函数:非const对象调用第二个函数:形参:可以传入常量、变量,但是不能改num的值  返回值: 不能左值    函数:非const对象和const对象都可调用*/T& operator[](const size_t& num){return m_array[num];}const T& operator[](const size_t& num)const{return const_cast<Array*>(this)->m_array[num];}/*形参:  加上&:表示减少拷贝,可以“双向传递”但是不能引用常量和常变量  加上&和const: 可以引用常量和常变量 ,但是num不能改变返回值:  加上&:减少拷贝 可以做左值(“双向传递”),但是必须引用全局/堆区/静态区的变量  加上const和&:返回值不能做左值,但是可以引用常量和常变量。函数:  加上const: 表示只有const对象能调用const函数。*/};int main()  {  const int row = 3, col = 4;  Array<Array<int, col>, row> arr;   //使用模板类递归,创建int型的3行4列二维数组Array<Array<double, col>, row> arr2;  //使用模板类递归,创建double型的5行4列二维数组Array<Array<double> > arr3;  //使用默认的非类型参数Array<Array<> > arr4;  //使用默认的类型参数 和 非类型参数/*数组赋值 和 打印数组*/for(int i = 0; i< row; i++){for(int j = 0; j < col; j++){arr[i][j] = i * j;}}for(int i = 0; i< row; i++){for(int j = 0; j < col; j++){cout<< arr[i][j] << "  ";}cout << endl;}   return 0;  }  

0 0
原创粉丝点击