接口方法的实现

Implementation of methods of interface

本文关键字:实现 方法 接口      更新时间:2023-10-16

我想要实现矩阵的表示。为此,我有两种类型的矩阵——正则矩阵和稀疏矩阵,它们的实现不同——一种是向量,另一种是索引和值的映射,它们都继承自Matrix类。为此,我使用了策略模式,在这里我创建了基本抽象类Matrix,这两个类继承自Matrix-RegMatrixSparseMatrix,以及MyMatrix,它保存了一个指向Matrix的指针。

我想实现+运算符,它在Matrix上操作并接收另一个Matrix。但当我实现+算子时,我可能会接收作为参数的稀疏/正则矩阵。

所以我有两个问题:

  1. 我唯一的提示是创建一个类型为"matrix"的迭代器,并为每种类型的矩阵(正则和稀疏)实现迭代器。我怎么能做这样的事?

  2. 假设我为这两种类型的"矩阵"实现了一个迭代器。如果我必须添加两种不同类型的矩阵,我如何使用不同的迭代器?我必须执行所有4种不同的情况吗?

操作员+看起来像:

Matrix& operator+(const Matrix& other)
{
   .....
}

最好不要在基类中实现功能。

实现每个子类中的功能。这将允许使用最佳算法。

或者,您可以在基类中将getter和setter声明为抽象,并在基类实现中使用它们:

struct Matrix_Base
{
  virtual int   get_value(unsigned int row, unsigned int column) = 0;
  virtual void  set_value(int value, unsigned int row, unsigned int column) = 0;
  Matrix_Base operator+(const Matrix_Base& other)
  {
    // perform addition
    int sum = get_value(row, column) + other.get_value(column, row);
    set_value(sum, row, column);
    //...
  }
};

记住,传递矩阵时,接收函数只能使用矩阵的常用函数(接口)。具体而言,函数必须在参数列表中使用专门的(子体)。

您只能为RegMatrix和2个转换运算符实现+运算符:1.从RegMatrix到SparseMatrix2.从稀疏矩阵到RegMatrix

性能要求是什么?