思勤无邪

上学时,因我年龄最小,个头也最小,上课时,就像大猩猩堆里的猴一般。如今,这猴偶尔也把最近的一些情况写在这里。

   :: 首页 :: 联系 :: 聚合  :: 管理
  132 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

公告

     吾日常三省吾身,曰思、曰勤、曰无邪。

积分与排名

  • 积分 - 159158
  • 排名 - 142

最新随笔

最新评论

阅读排行榜

评论排行榜

将上一篇的动态数组的函数模板封成了类,但没有错误处理等。

#include  < iostream >
#include 
< string >

using   namespace  std;

template
< class  T >
class  TDArray
{
public :
    TDArray(
int  rows,  int  cols);
    
~ TDArray();
    template
< class  Tt >  friend ostream &   operator << ( ostream &  output,  const  TDArray < Tt >&  tdArray );
    T
*   operator []( int  rows);

private :
    
void  Init();
    T 
** p;
    
int  m_rows;
    
int  m_cols;
}
;

template
< class  T >
TDArray
< T > ::TDArray( int  rows,  int  cols)
{
    m_rows 
=  rows;
    m_cols 
=  cols;
    
//  创建行指针
    p  =   new  T * [rows];
    
//  为每一行分配空间
     for  ( int  i = 0 ; i < rows;  ++ i)
    
{
        p[i] 
=   new  T[cols];
    }

    
//  初始化
    Init();
}


template
< class  T >
TDArray
< T > :: ~ TDArray()
{
    
for  ( int  x = 0 ; x < m_rows;  ++ x)
    
{
        delete[] p[x];
    }

    delete[] p;
    p 
=   0 ;
}


template
< class  T >
inline 
void  TDArray < T > ::Init()
{
    
for  ( int  x = 0 ; x < m_rows;  ++ x)
    
{
        
for  ( int  y = 0 ; y < m_cols;  ++ y)
        
{
            p[x][y] 
=  T();
        }

    }

}


template
< class  T >
ostream
&   operator << ( ostream &  output,  const  TDArray < T >&  tdArray )
{
    
for  ( int  x = 0 ; x < tdArray.m_rows;  ++ x)
    
{
        
for  ( int  y = 0 ; y < tdArray.m_cols;  ++ y)
        
{
            output 
<<   " [ "   <<  x  <<   " ][ "   <<  y  <<   " ] "   <<  tdArray.p[x][y]  <<   "   " ;
        }

        output 
<<  endl;
    }

    
return  output;
}


template
< class  T >
inline T
*  TDArray < T > :: operator []( int  rows)
{
    
return  p[rows];
}

int  main( void )
{
    TDArray
< int >  iArray  =  TDArray < int > ( 2 3 );
    iArray[
1 ][ 0 =   100 ;
    cout 
<<  iArray;

    system(
" pause " );
    
return   0 ;
}

posted on 2006-09-28 15:44 思勤无邪 阅读(684) 评论(2)  编辑 收藏 引用 所属分类: C++

Feedback

# re: 将动态二维数组的函数模板封成了类 2006-09-29 10:06 周星星
:) 什么是二维数组?

二维数组的第一维元素的类型为“一维数组”,而不是“指向‘一维数组’的指针”  回复  更多评论
  

# re: 将动态二维数组的函数模板封成了类 2008-12-01 09:59 anxinboyin
楼上正解。
并且数组长度是编译期量,所以正常情况下也应该作为模板参数。  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理