/*
使用模板类创建数组 以及 二维数组(模板类递归)
*/
#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;
}
使用模板创建二维数组
最新推荐文章于 2021-07-16 17:28:08 发布