array3d.h

来自「面向软件工程的Visual C++网络程序开发」· C头文件 代码 · 共 71 行

H
71
字号
#ifndef _ARRAY3D_H_
#define _ARRAY3D_H_

#include "afxtempl.h"
#include "array2d.h"

template<class T>
class AFX_EXT_CLASS CArray3d {
	int m_nLayer;
	CArray2d<T> *m_pArray2d;

public:
	CArray3d() : m_nLayer(0), m_pArray2d(NULL){}
	CArray3d(int nLayer, int nWidth, int nHeight)
	{
		Array3dAlloc(nLayer, nWidth, nHeight);
	}

	~CArray3d() {
		Array3dFree();
	}
	BOOL Array3dAlloc(int nLayer, int nWidth, int nHeight) 
	{
		m_nLayer = nLayer;
		m_pArray2d = new CArray2d<T>[nLayer];
		for(int i=0; i<m_nLayer; i++) {
			if(!m_pArray2d[i].ArrayAlloc(nWidth, nHeight)) 
				break;
		}
		if(i == m_nLayer) return TRUE;
		for(int j=0; j<i; j++) {
			m_pArray2d[j].ArrayFree();
		}
		delete []m_pArray2d;
		m_pArray2d = NULL;
		m_nLayer = 0;
		return FALSE;
	}

	void Array3dFree()
	{
		for(int i=0; i<m_nLayer; i++) {
			m_pArray2d[i].ArrayFree();
		}
		m_nLayer = 0;
		m_pArray2d = NULL;
	}
	
	CArray2d<T>& operator[](int n) {
		return m_pArray2d[n];
	}
	BOOL IsEmpty() {
		if((m_nLayer == 0) || (m_pArray2d == NULL)) return TRUE;
		return FALSE;
	}
	int GetLayer() {
		return m_nLayer;
	}
	int GetWidth() {
		if(IsEmpty()) return 0;
		return m_pArray2d[0].GetWidth();
	}
	int GetHeight() {
		if(IsEmpty()) return 0;
		return m_pArray2d[0].GetHeight();
	}
};



#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?