我在网上寻找了战略模式的良好示例,但是我发现的示例可以简化。
我想实现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实现中是重复的。