使用模板创建二维数组

/*
	使用模板类创建数组 以及 二维数组(模板类递归)
*/


#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;  
}  

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值