我有一门课程,涉及实现两个类,一个用于存储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/

10-12 20:18