类模板

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

1.用一个模板实现:

#include 
using namespace std;
template 
class CArray3D{
	template 
	class CArray2D{
		template 
		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[a];
			for (int i = 0; i& operator[](long elem) const
		{
			//  assert( elem >= 0 && elem < _b );   
			return p[elem];
		}

		~CArray2D()
		{
			delete[] p;
		}

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

	~CArray3D()
	{
		delete[] p;
	}

private:
	CArray2D* p;
	T _c;

};
int main()
{
	CArray3D 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 
using namespace std;

template 
		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 CArray2D{

	public:
		CArray2D() :p(NULL){}
		void set(T a, T b){
			p = new CArray1D[a];
			for (int i = 0; i& operator[](long elem) const
		{
			//  assert( elem >= 0 && elem < _b );
			return p[elem];
		}

		~CArray2D()
		{
			delete[] p;
		}

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

	~CArray3D()
	{
		delete[] p;
	}

private:
	CArray2D* p;
	T _c;

};
int main()
{
	CArray3D 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;
}


你可能感兴趣的:(C/C++)