使用子类c ++

时间:2017-01-17 10:45:13

标签: c++ matrix

我有一个课程,涉及实现两个类,一个用于存储Matrix对象,另一个用于SquareMatrix对象。我们必须实现成员函数以能够求解形式Ax = b的方程,其中A是矩阵,x是我们想要找到的向量,b是已知向量。

我已经在SquareMatrix的情况下实现了这一点,因为高斯消除并不太难。课程作业说我们应该用非方形矩阵解决案例的方法是用' Ax = A' b来解决。意思是转置。 A' A现在是方矩阵,因此也可以使用高斯消元来解决。

我想知道的是,在Matrix求解函数中创建SquareMatrix对象是否有效,然后使用SquareMatrix成员求解来解决系统问题。例如,如果在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%不知道我的继承权,所以我不确定这是否是一个有效或明智的事情。

1 个答案:

答案 0 :(得分:1)

  

我不确定这是否是一个有效或明智的事情。

在某些情况下使用派生类来实现父类的功能是有效的。

SquareMatrix派生Matrix是否有意义是另一个考虑因素。要知道该问题的答案,您需要考虑您的设计,并概述Matrix的所有类不变量和成员函数前后条件,然后考虑SquareMatrix是否可以满足所有这些条件