类模板

实现一个三维数组模版CArray3D,可以用来生成元素为任意类型变量的三维数组

1.用一个模板实现:

#include <iostream>
using namespace std;
template <class T>
class CArray3D{
	template <class T>
	class CArray2D{
		template <class T>
		class CArray1D {
		public:
			CArray1D() :p(NULL){}
			void set(T a)
			{
				p = new T[a];
				_a = a;
			}
			inline T& operator[](long elem) const
			{
				//  assert( elem >= 0 && elem < _a );   
				return p[elem];
			}

			~CArray1D()
			{
				delete[] p;
			};

		private:
			T* p;
			T _a;
		};
	public:
		CArray2D() :p(NULL){}
		void set(T a, T b){
			p = new CArray1D<T>[a];
			for (int i = 0; i<a; i++){
				p[i].set(b);
			}
			_b = b;
		}

		inline CArray1D<T>& operator[](long elem) const
		{
			//  assert( elem >= 0 && elem < _b );   
			return p[elem];
		}

		~CArray2D()
		{
			delete[] p;
		}

	private:
		CArray1D<T>* p;
		T _b;
	};
public:
	CArray3D(T a, T b, T c){
		p = new CArray2D<T>[a];
		for (int i = 0; i<a; i++){
			p[i].set(b, c);
		}
		_c = c;
	}

	inline CArray2D<T>& operator[](long elem) const
	{
		//  assert( elem >= 0 && elem < _c );   
		return p[elem];
	}

	~CArray3D()
	{
		delete[] p;
	}

private:
	CArray2D<T>* p;
	T _c;

};
int main()
{
	CArray3D<int> a(3, 4, 5);
	int No = 0;
	for (int i = 0; i < 3; ++i)
	for (int j = 0; j < 4; ++j)
	for (int k = 0; k < 5; ++k)
		a[i][j][k] = No++;
	for (int i = 0; i < 3; ++i)
	for (int j = 0; j < 4; ++j)
	for (int k = 0; k < 5; ++k)
		cout << a[i][j][k] << ",";
	return 0;
}
2.多个模板实现:

#include <iostream>
using namespace std;

template <class T>
		class CArray1D {
		public:
			CArray1D() :p(NULL){}
			void set(T a)
			{
				p = new T[a];
				_a = a;
			}
			inline T& operator[](long elem) const
			{
				//  assert( elem >= 0 && elem < _a );
				return p[elem];
			}

			~CArray1D()
			{
				delete[] p;
			}

		private:
			T* p;
			T _a;
		};

    template <class T>
	class CArray2D{

	public:
		CArray2D() :p(NULL){}
		void set(T a, T b){
			p = new CArray1D<T>[a];
			for (int i = 0; i<a; i++){
				p[i].set(b);
			}
			_b = b;
		}

		inline CArray1D<T>& operator[](long elem) const
		{
			//  assert( elem >= 0 && elem < _b );
			return p[elem];
		}

		~CArray2D()
		{
			delete[] p;
		}

	private:
		CArray1D<T>* p;
		T _b;
	};
template <class T>
class CArray3D{
public:
	CArray3D(T a, T b, T c){
		p = new CArray2D<T>[a];
		for (int i = 0; i<a; i++){
			p[i].set(b, c);
		}
		_c = c;
	}
	inline CArray2D<T>& operator[](long elem) const
	{
		//  assert( elem >= 0 && elem < _c );
		return p[elem];
	}

	~CArray3D()
	{
		delete[] p;
	}

private:
	CArray2D<T>* p;
	T _c;

};
int main()
{
	CArray3D<int> a(3, 4, 5);
	int No = 0;
	for (int i = 0; i < 3; ++i)
	for (int j = 0; j < 4; ++j)
	for (int k = 0; k < 5; ++k)
		a[i][j][k] = No++;
	for (int i = 0; i < 3; ++i)
	for (int j = 0; j < 4; ++j)
	for (int k = 0; k < 5; ++k)
		cout << a[i][j][k] << ",";
	return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值