我有一门课程,涉及实现两个类,一个用于存储Matrix对象,另一个用于SquareMatrix对象。我们必须实现成员函数,才能求解Ax = b形式的方程,其中A为矩阵,x为我们要查找的向量,b为已知向量。
我在SquareMatrix的情况下实现了这一点,因为与高斯消去并不太难。课业说我们应该用来解决非平方矩阵情况的方法是解决A'Ax = A'b具有'意思是转置。 A'A现在是一个方形矩阵,因此也可以使用高斯消除法解决。
我想知道的是在Matrix求解函数中创建SquareMatrix对象,然后使用SquareMatrix成员solve来求解系统是否合法。例如,如果在SquareMatrix中
Matrix SquareMatrix::solve(Matrix& b){
//stuff that solves (*this) * x = b for x and returns x
}
然后我可以在Matrix.cpp中有
Matrix Matrix::solve(Matrix& b){
//make the matrix into a square
SquareMatrix AtransposeA = (this->transpose())*(*this);
//update rhs of equation accordingly
Matrix Atransposeb = (this->transpose()) * b;
//Call SquareMatrix solve to solve the problem.
Matrix x = AtransposeA.solve(Atransposeb);
return x;
}
因此,我通过乘以矩阵的转置来使其变为正方形,然后调用SquareMatrix求解函数。我是C ++的新手,还没有100%着手继承问题,所以我不确定这是否是有效的或明智的做法。
最佳答案
我不确定这是否有效或明智。
在某些情况下,使用派生类来实现父类的功能是有效的。
从SquareMatrix
派生Matrix
是否有意义是另一个考虑因素。要知道该问题的答案,您需要考虑设计,并概述Matrix
的所有类不变式和成员函数的前置条件和后置条件,然后考虑SquareMatrix
是否可以满足所有条件。
关于c++ - 使用子类C++实例的父类成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41695035/