C++ : 用proxy Class实现简单的二维数组。

原创 2004年08月31日 09:59:00

这几天在看more effective c++,看到条款30:Proxy Class中提到用Proxy Class实现二维数组,可是书上并没有给出完整的实例,我就花了一些时间自己写了一个简单的。只是实现了最基本的功能,一些异常处理并没有加入。


#include <iostream>
using namespace std;

template<class T>
class Array2D
{
public:
    int d1,d2;
    Array2D(int dim1, int dim2);
    ~Array2D();

    class Array1D
    {
    public:
        Array1D(int dim)
       {
             m_D = new T[dim];
        }

         ~Array1D()
       {
            delete [] m_D;
        }

        T* m_D;

        T& operator[](int index)
       {
            return m_D[index];
        }
    };
   
    Array1D ** m_1D;
    Array1D& operator[](int index);
};

template<class T>
Array2D<T>::Array2D(int dim1, int dim2)
{
    m_1D = new Array1D*[dim1];
    for(int i = 0; i < dim1; i++)
    {
         m_1D[i] = new Array1D(dim2);
    }

    d1 = dim1;
    d2 = dim2;
}

template<class T>
Array2D<T>::~Array2D()
{
    for(int i = 0; i < d1; i++)
    {
          delete (Array1D*)m_1D[i];
    }

    delete [] m_1D;
}

//template<class T>
//Array2D<T>::Array1D::Array1D(int dim)
//{
//    m_D = new T[dim];
//}

template<class T>
Array2D<T>::Array1D& Array2D<T>::operator[](int index)
{
      return *m_1D[index];
}

//template<class T>
//T& Array2D<T>::Array1D::operator[](int index)
//{
//    return m_D[index];
//}

int main()
{
    Array2D<int>  data(3,5);

    for(int i = 0; i <= 2; i++)
    {
          for(int j = 0; j <= 4; j++)
          {
               data[i][j] = i+j;
          }
     }

    for(int i = 0; i <= 2; i++)
    {
          for(int j = 0; j <= 4; j++)
         {
                 cout << data[i][j] << " ";
          }
          cout << endl;
    }
}

运行结果:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6

大家可能看到了代码中有一些注释掉的东东,由于我对模板并不是很熟悉,所以开始的时候,Array1D的构造函数以及对[]的重载函数并没有写在类的内部,而是像注释那样,写在了类的外面,但是编译时报错说:
e:/visual c++ projects/pointer/a.cpp(85): error C3206: “Array2D<T>::Array1D::Array1D” : 不能在类的外部定义模板类的嵌套类的成员函数

于是我又把这几个函数定义到了类的内部。这也算学到了一点额外的东东吧。
同时感谢 kingfox(小狐仙) ,他指出了我代码中的一个错误:
template<class T>
Array2D<T>::Array1D& Array2D<T>::operator[](int index)
{
   return *m_1D[index];
}

开始的时候我忘记把返回值定义为引用了,结果导致错误。

C++二维数组实现杨辉三角的前10行输出

  • 2012年09月13日 01:03
  • 319B
  • 下载

C++:简单的二维数组模板类

这是我自己封闭的简单的二维数组模板类。欢迎大家试用 我用它来代替二维数组或二维vector(二维数组容易出错,二维vector效率太低)...
  • AAA20090987
  • AAA20090987
  • 2013-11-19 18:09:04
  • 2098

如何用C++向量vector生成二维数组

#include iostream>#include vector>#include iomanip>using namespace std;int main(){ int i,     j,    ...
  • xiaochongchong1248
  • xiaochongchong1248
  • 2009-09-01 20:20:00
  • 2072

用二维数组打印杨辉三角(c/c++)

编程打印如下形式的杨辉三角                                 1                              1 2 1               ...
  • j2013210855
  • j2013210855
  • 2014-11-09 14:49:27
  • 721

结构型模式之代理模式(Proxy Pattern)C++实现

定义:为另一个对象提供一个替身或占位符以控制对这个对象的访问。 代理模式类图: 使用代码模式的情况: 1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给...
  • xiaoding133
  • xiaoding133
  • 2012-07-03 14:10:14
  • 778

C++实现搜狗浏览器加速代理客户端(HTTP/HTTPS)的核心代码

借助sogou搜狗浏览器的电信, 联通和教育网的加速代理(支持CONNECT方式的HTTPS连接), 可以实现上网加速特别是教育网的加速,  不过代理不能直接使用, 必须搭建一个搜狗浏览器代理客户端来...
  • rrrfff
  • rrrfff
  • 2012-02-02 15:37:40
  • 12723

一个简单的HTTP代理服务器c语言实现

HTTP代理原理不难。相关协议的资料网上很多。 但是想要找一份现成的简单源码来参考却不容易。这两天下载了很多http proxy的源码,几乎都或多或少有些问题,不能直接使用。 所以最后还是下决心自...
  • tiankong_bear
  • tiankong_bear
  • 2015-08-26 21:38:44
  • 3404

自己写非阻塞代理服务器 proxy 之C语言版

代理服务器的工作流程就是:把client的访问请求发送到proxy,proxy再把这些数据转到server,然后server对这个请求产生响应数据,发送到proxy,proxy再把这些数据转到clie...
  • littlethunder
  • littlethunder
  • 2013-05-22 13:59:09
  • 13995

C++实现二位数组加减法

为了深入理解C++中拷贝构造函数、赋值运算符、运算符重载、动态内存分配new,写了一个实现数组加法的类。虽然该程序实现的功能比较简单,但是却包含了不少难点和初学者容易忽视的地方。 //class.h ...
  • HKaisa
  • HKaisa
  • 2016-08-12 00:27:52
  • 2020

C++ 数组 一维数组 二维数组

  • 2012年06月08日 11:38
  • 235KB
  • 下载
收藏助手
不良信息举报
您举报文章:C++ : 用proxy Class实现简单的二维数组。
举报原因:
原因补充:

(最多只允许输入30个字)