用代理类实现二组数组

      C++语言在数组的支持方面不强其他语言强劲,如FORTRAN、BASIC、甚至在COBOL中可以产生二维数组、三维数组,乃至于n维数组,但你能C++中这么做吗?有同学不同意了,C++中可以产生二维数组啊,int data[2][3]不是吗?但是,如果这样:

还行吗?C++不允许!

 

      那么怎么办呢?《more effective c++》中Item 30有详细的介绍,但没有给出具体代码。本人实现了下:

      当然,其中也遇到了一些困难,现整理如下:

 

      FIRST ,代码第27行中,typename Array2D<T>::Array1D&,关键字typename有什么作用?

      typename有双重意义,具体参见<<effective c++>> Item 42。这里只由于其第二重意义。观察Array2D<T>::Array1D,其类型取决于template参数T。template内出现的名称如果相依于某个template参数,称之为从属名称。如果从属名称在class内呈嵌套状,则称之为嵌套从属名称。而嵌套从属名称有可能导致解析困难,所以必须在其前加上关键字typename表示其是一个类型。

      SECOND ,代码50~55读者是否感到有些奇怪。为什么不写成dim1Data = new myType[dim1](realDim2);呢?事实上,该语句是不能通过编译的。因为这不符合C++的语法。那么只能用点小聪明代替了。这里还要注意就是代码行62调用的是类赋值函数,刚开始笔者也在此处吃了亏。

 

 

      总之,学习C++之路还是很漫长啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值