类模板
来源:互联网 发布:最后的狮子 知乎 编辑:程序博客网 时间:2024/05/23 13:20
实现一个三维数组模版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;}
0 0
- 函数模板、类模板
- 模板 - 类模板
- 模板函数,模板类
- 模板的模板类
- 类模板(函数模板)
- 模板之---类模板
- C++模板:模板类
- 函数模板 类模板
- 函数模板、类模板
- C++模板学习(函数模板+类模板)
- 模板——函数模板、类模板
- 模板 Templates 模板函数 模板类
- C++模板(类模板、函数模板)
- 模板之类模板(数组类模板)
- 类模板
- 类模板
- 类模板
- 类模板
- 第二章 面向对象的编程风格(使用静态局部变量)
- leetcode Count and Say
- ios NSTimer的基本用法
- 绝对值排序
- android ExpandableListView详解
- 类模板
- RFID第三次作业
- 在控制台编译运行java程序详细指导
- 归并排序
- Android-自定义ProgressBar
- 关于我与云计算
- 用数组一定要初始化
- n人围成一圈数数出列的问题
- 引导页旋转动画的实现