重载构造函数以处理不同的数据类型

时间:2014-04-16 15:51:25

标签: c++ constructor overloading

我有一个包含以下构造函数的类

//matrix constructor
mat::mat(int nrows,int ncols){
  this->nrows=nrows;
  this->ncols=ncols;
  this->dat=new float *[nrows];
  for(int i=0;i<nrows;i++){
    this->dat[i]=new float[ncols];
     for(int j=0;j<ncols;j++){
        this->dat[i][j]=-9999;
      }
   }
}

如您所见,构造函数用于包含浮点数的矩阵。我想有时使用相同的构造函数来创建一个整数矩阵。如何通过对上述代码的最小更改来完成此操作?我不想为矩​​阵创建一个包含整数的新类。

由于

1 个答案:

答案 0 :(得分:2)

你可以写一个模板化的mat类:

template<typename T>
class mat {
    //matrix constructor
    mat(int nrows,int ncols) {
        this->nrows=nrows;
        this->ncols=ncols;
        this->dat=new T *[nrows];
                   // ^ 
        for(int i=0;i<nrows;i++){
        this->dat[i]=new T[ncols];
                      // ^ 
        for(int j=0;j<ncols;j++){
            this->dat[i][j]=-9999;
      }
   }
};

float的每次出现替换为T,并将所有代码内联到mat.h头文件中。

更新:

  

上面的代码如何看待std :: vector?

template<typename T>
class mat {
    //matrix constructor
    mat(int nrows_,int ncols_)
    : nrows(nrows_) , ncols(ncols_) {
        dat.resize(nrows);
        for(int i=0;i<nrows;i++) {
            dat[i].resize(ncols);
            for(int j=0;j<ncols;j++) {
                dat[i][j]=-9999;
            }
        }
    }
private:
    int nrows;
    int ncols;
    std::vector<std::vector<T>> dat;
};