我在网上寻找了战略模式的良好示例,但是我发现的示例可以简化。

我想实现MyMatrix类。
为此,我使用了策略模式,即我创建了一个Matrix类和两个继承的类:RegMatrix和SparseMatrix,它们在实现上有所不同。

我知道MyMatrix应该持有一个指向Matrix的指针(我们称它为* _matrix),然后例如,如果我想实现MyMatrix的“打印”功能,我应该这样做:_matrix-> print(),然后选择适当的实现。

我唯一不了解的是:
在MyMatrix的构造函数中,该函数获取数组和矩阵大小,我是否需要选择
矩阵类型的某个对象并对其进行初始化?
我的意思是,我应该这样做:

MyMatrix::MyMatrix(double arr[], unsigned int colSize, unsigned int rowSize)
{
    _colSize = colSize;
    _rowSize = rowSize;
    _matrix = new RegMatrix(arr, colSize, rowSize);
}

最佳答案

常见的变体是将接口(interface)(矩阵)的实例传递给构造函数。

MyMatrix::MyMatrix(const Matrix& behaviour):
  colSize(behaviour.getCols()), rowSize(behaviour.getRows()), matrix(behaviour)
{
}

// creation
MyMatrix m(SparseMatrix(4, 2, arr));

使用初始化程序。不要使用多余的下划线。参见Alf的评论。 colSize和rowSize可能不需要,因为它们在Matrix实现中是重复的。

07-24 21:38