+ -
当前位置:首页 → 问答吧 → 一个Matrix类

一个Matrix类

时间:2010-08-20

来源:互联网

看到书上的一个类
template <typename Object>

class matrix

{

  public:

    matrix( int rows, int cols ) : array( rows )

    {

        for( int i = 0; i < rows; i++ )

            array[ i ].resize( cols );

    }



    const vector<Object> & operator[]( int row ) const

      { return array[ row ]; }

    vector<Object> & operator[]( int row )

      { return array[ row ]; }



    int numrows( ) const

      { return array.size( ); }

    int numcols( ) const

      { return numrows( ) ? array[ 0 ].size( ) : 0; }

  private:

    vector< vector<Object> > array;

};

在这个类的定义中,operator[]完全是两种signature,那么请问,在使用过程中,编译器是怎么识别这两个的呢?

比如:
void copy( const matrix<int> &from, matrix<int> &to )
{
for ( 0 ... to.size() )
    to[i] = from[i]
}

在这个函数中,是通过那个const关键字识别的?

作者: alexandnpu   发布时间: 2010-08-20

一般,C++不会区别重载中的const type和type,但是const成员函数会被区别对待(const this),即const type A::foo()和type A::foo()会覆盖,而A::foo()const与A::foo()不会覆盖,此例中显然使用非const成员函数。

作者: subuam   发布时间: 2010-08-21