根据派生 class 的大小创建一个数组

create an array based on size from derived class

所以我有一个名为 Matrice 的摘要 class,其中包含一个复数矩阵

class Matrice {
    Complex** v;      //matrix
public:
    Matrice() {
        v = new Complex * [//lin];    //use size here, without declaring it here
        for (int i = 0; i < //lin; i++) {
            v[i] = new Complex[//col];
            for (int j = 0; j < //col; j++)
                cin >> v[i][j];
        }
    }
    virtual void afisare(int lin, int col) {
        for (int i = 0; i < lin; i++) {
            for (int j = 0; j < col; j++)
                cout << v[i][j] << " ";
            cout << endl;
        }
    }
};

它是派生的class

class Matrice_oarecare :Matrice {
    int lin, col;    //the size i want to use
public:
    Matrice_oarecare();
    ~Matrice_oarecare() {

    }
    void afisare() { Matrice::afisare(lin, col); }
};

问题是我如何使用派生的 class Matrice_oarecare 中指定的大小动态分配我的矩阵,抱歉这个愚蠢的问题,但我是这个继承的新手

如果 Matrice_oarecare 继承自 Matrice,它对 Matrice class 的所有 protected 属性具有可见性。

如果您想从派生的 class 访问 Complex**v 那么 Complex**v 应该在基地 class.

中受到保护

并在 Matrice_oarecare 中分配:

v = new Complex*[lin];
for(int i = 0; i < lin; ++i)
   v[i] = new Complex[col];

备选

您可以在基 class 中使用一个名为 allocate 的函数来分配 Complex** 数组,如下所示:

class Matrice{
    void allocate(int rows, int cols){
           v = new Complex*[rows];
           for(int i = 0; i < rows; ++i)
                v[i] = new Complex[cols];
    }
}

并从派生的 class 的构造函数中调用它。所以你会有

class Matrice_oarecare :Matrice {
    int lin, col;   
public:
    Matrice_oarecare(int rows, int cols):lin(rows),col(cols){
          Matrice::allocate(lin, col);
    }
    ~Matrice_oarecare() {

    }
    void afisare() { Matrice::afisare(lin, col); }
};

您也可以将 lincol 作为 Matrice

的构造函数的参数

为什么不重载构造函数? 您可以将派生构造函数的参数传递给 base_class 构造函数,然后按您认为合适的方式使用这些参数。

class Matrice {
    Complex** v;      //matrix
public:
    Matrice(int lin, int cols) {
        v = new Complex * [lin];    //use size here, without declaring it here
        for (int i = 0; i < lin; i++) {
            v[i] = new Complex[cols];
            for (int j = 0; j < cols; j++)
                cin >> v[i][j];
        }
    }
    virtual void afisare(int lin, int col) {
        for (int i = 0; i < lin; i++) {
            for (int j = 0; j < col; j++)
                cout << v[i][j] << " ";
            cout << endl;
        }
    }
};


class Matrice_oarecare :Matrice {
    int lin, col;    //the size i want to use
public:
   Matrice_oarecare():
      Matrice(lin, col) {};

   ~Matrice_oarecare() {}

   void afisare() { Matrice::afisare(lin, col); }
};