根据派生 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); }
};
您也可以将 lin
和 col
作为 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); }
};
所以我有一个名为 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); }
};
您也可以将 lin
和 col
作为 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); }
};