使用模板创建二维数组

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


#include 
using namespace std;

template   //默认类型参数 和 非类型参数(只能传递常量/常变量/常量表达式)
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(this)->m_array[num];
	}
	/*
		形参:
			  加上&:表示减少拷贝,可以“双向传递”
					但是不能引用常量和常变量
			  加上&和const: 可以引用常量和常变量 ,但是num不能改变
		返回值:
			  加上&:减少拷贝
					 可以做左值(“双向传递”),但是必须引用全局/堆区/静态区的变量
			  加上const和&:返回值不能做左值,但是可以引用常量和常变量。
		函数:
			  加上const: 表示只有const对象能调用const函数。
	*/
};


int main()  
{  
	const int row = 3, col = 4;  
	Array, row> arr;   //使用模板类递归,创建int型的3行4列二维数组
	Array, row> arr2;  //使用模板类递归,创建double型的5行4列二维数组
	Array > arr3;  //使用默认的非类型参数
	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;  
}  

你可能感兴趣的:(STL学习)